从SMTP服务器使用PHP发送电子邮件

$from = "someonelse@example.com"; $headers = "From:" . $from; echo mail ("borutflis1@gmail.com" ,"testmailfunction" , "Oj",$headers); 

我无法在PHP中发送电子邮件。 我得到一个错误: SMTP server response: 530 SMTP authentication is required

我的印象是,你可以发送电子邮件没有SMTPvalidation。 我知道这封邮件会被过滤掉,但现在没关系。

 [mail function] ; For Win32 only. ; http://php.net/smtp SMTP = localhost ; http://php.net/smtp-port smtp_port = 25 ; For Win32 only. ; http://php.net/sendmail-from sendmail_from = someonelse@example.com 

这是php.ini文件中的设置。 我应该如何设置SMTP? 有没有需要validation的SMTP服务器,或者我必须自己设置服务器?

当您通过需要SMTP Auth的服务器发送电子邮件时,您确实需要指定它,并设置主机,用户名和密码(也可能是端口,如果它不是默认的 – 25)。

例如,我通常使用类似PHPMailer设置这个:

 $mail = new PHPMailer(); $mail->IsSMTP(); $mail->CharSet = 'UTF-8'; $mail->Host = "mail.example.com"; // SMTP server example $mail->SMTPDebug = 0; // enables SMTP debug information (for testing) $mail->SMTPAuth = true; // enable SMTP authentication $mail->Port = 25; // set the SMTP port for the GMAIL server $mail->Username = "username"; // SMTP account username example $mail->Password = "password"; // SMTP account password example 

您可以在这里find更多关于PHPMailer的信息: https : //github.com/PHPMailer/PHPMailer

 <?php ini_set("SMTP", "aspmx.l.google.com"); ini_set("sendmail_from", "YOURMAIL@gmail.com"); $message = "The mail message was sent with the following mail setting:\r\nSMTP = aspmx.l.google.com\r\nsmtp_port = 25\r\nsendmail_from = YourMail@address.com"; $headers = "From: YOURMAIL@gmail.com"; mail("Sending@provider.com", "Testing", $message, $headers); echo "Check your email now....<BR/>"; ?> 

要么

阅读

对于Unix用户,mail()实际上是使用Sendmail命令发送邮件。 而不是修改应用程序,您可以更改环境。 msmtp是SMTP客户端与Sendmail兼容的CLI语法,这意味着它可以用来代替Sendmail。 它只需要你的php.ini的一个小的改变。

 sendmail_path = "/usr/bin/msmtp -C /path/to/your/config -t" 

那么即使是低级的mail()函数也可以和SMTP一起工作。 如果您试图将现有的应用程序连接到像sendgrid或mandrill这样的邮件服务而不修改应用程序,这是非常有用的。

问题是PHP mail()函数的function非常有限。 有几种方法可以从PHP发送邮件。

  1. mail()在您的系统上使用SMTP服务器。 在Windows上至less可以使用两台服务器: hMailServer和xmail 。 我花了几个小时configuration和获取它们。 我认为第一个比较简单。 目前,hMailServer正在使用Windows 7 x64。
  2. mail()使用Linux上的远程或虚拟机上的SMTP服务器。 当然,Gmail等真正的邮件服务不允许没有任何凭据或密钥的直接连接。 您可以设置虚拟机或使用位于局域网中的虚拟机。 大多数Linux发行版都有邮箱服务器。 configuration它,玩得开心。 我在Debian 7上使用默认的exim4来监听它的LAN接口。
  3. 邮件库使用直接连接。 Libs更容易设置。 我使用了SwiftMailer,它完美地发送来自Gmail帐户的邮件。 我认为PHPMailer也不错。

不pipe你有什么select,我build议你使用一些抽象层。 您可以在运行Windows的开发机器上使用PHP库,只需在Linux上使用生产机器上的mail()函数即可。 抽象层允许您根据运行应用程序的系统交换邮件驱动程序。 用抽象的send()方法创build抽象MyMailer类或接口。 inheritance两个类MyPhpMailerMySwiftMailer 。 以适当的方式实现send()方法。

这是用PHP PEAR做的一个方法

 // Pear Mail Library require_once "Mail.php"; $from = '<your@mail.com>'; //change this to your email address $to = '<someone@mail.com>'; // change to address $subject = 'Insert subject here'; // subject of mail $body = "Hello world! this is the content of the email"; //content of mail $headers = array( 'From' => $from, 'To' => $to, 'Subject' => $subject ); $smtp = Mail::factory('smtp', array( 'host' => 'ssl://smtp.gmail.com', 'port' => '465', 'auth' => true, 'username' => 'your@gmail.com', //your gmail account 'password' => 'snip' // your password )); // Send the mail $mail = $smtp->send($to, $headers, $body); 

如果你使用gmail smtp记得在你的gmail帐户下启用SMTP,在设置下

有一些SMTP服务器在没有validation的情况下工作,但是如果服务器需要validation,那么没有办法规避这种情况。

PHP的内置邮件function非常有限 – 只能在WIndows中指定SMTP服务器。 在* nix上, mail()将使用操作系统的二进制文件。

如果你想发送电子邮件到网上的任意SMTP服务器,可以考虑使用像SwiftMailer这样的库。 这将使您能够使用,例如,谷歌邮件的传出服务器。