使用Gmail SMTP通过PHP发送电子邮件

使用Gmail SMTP通过PHP发送电子邮件,php,smtp,gmail,pear,Php,Smtp,Gmail,Pear,我有一个问题,我已经研究了大约一个星期,找不到答案。作为这一切的序言,我在互联网上搜索了各种各样的东西。这个问题有很多答案,但似乎没有一个对我有帮助 我对PHP和我所要求的很多东西有些陌生(在过去的几个月里一直在使用它)。让我谈谈问题的根源: 我在一个学校网络上,宿舍里安装了我自己的服务器。我正在创建一个需要验证用户电子邮件的网站,但是基本的PHP mail()函数不起作用。我被告知我将需要使用SMTP。所以我决定最简单、最便宜的方法是使用Gmail SMTP。我在Gmail上创建了一个名为ve

我有一个问题,我已经研究了大约一个星期,找不到答案。作为这一切的序言,我在互联网上搜索了各种各样的东西。这个问题有很多答案,但似乎没有一个对我有帮助

我对PHP和我所要求的很多东西有些陌生(在过去的几个月里一直在使用它)。让我谈谈问题的根源:

我在一个学校网络上,宿舍里安装了我自己的服务器。我正在创建一个需要验证用户电子邮件的网站,但是基本的PHP mail()函数不起作用。我被告知我将需要使用SMTP。所以我决定最简单、最便宜的方法是使用Gmail SMTP。我在Gmail上创建了一个名为verify的帐户。impressions@gmail.com因此,。这是代码

echo "starting mail sending";
             require_once("pear/share/pear/Mail.php");

echo "1";

$from = "PersonA `<someone@gmail.com`>";   $to = "`<someoneElse@email.com`>";   $subject = "Activate your account";   $body = "Hey";  

$host = "ssl://smtp.gmail.com";   $port = "465"; //also tried 587   $username = "someone@gmail.com";   $password = "password";  

echo "2";

$headers = array ('From' => $from,    'To' => $to,    'Subject' => $subject);

echo "3";

$mailer_params['host'] = $host;   $mailer_params['port'] = $port;   $mailer_params['auth'] = true;   $mailer_params['username'] = $username;   $mailer_params['password'] = $password;                                              
                 $smtp = Mail::factory('smtp', $mailer_params);

echo "4";

error_reporting(E_ALL);

echo "5";

if (PEAR::isError($smtp)) {   die("Error : " . $smtp->getMessage()); }

echo "6";

$mail = $smtp->send($to, $headers, $body) or die("Something bad happened"); 

echo "7";

if (PEAR::isError($mail)) {echo($mail->getMessage();} else {echo(Message successfully sent!);}
                 echo "mail sent hopefully.";

我试过打印错误,但我现在不知道该怎么办。任何提示和帮助都将不胜感激。谢谢

如果您使用的是Linux,我建议您在本地计算机上设置postfix,他们会要求您通过外部SMTP服务(如Gmail)转发电子邮件

原因是,如果与Gmail联系出现延迟,您的PHP脚本可能会超时。因此,您可以使用Postfix在本地服务器上对电子邮件进行排队,让PHP脚本执行终止,并信任Postfix通过Gmail发送电子邮件


如果您使用的是Windows,我相信您可以找到一个等效的SMTP中继应用程序(应作为粗略猜测构建)。

许多公共网络阻止SMTP端口与远程计算机的连接,以阻止网络内的垃圾邮件发送者

你有两个选择:

  • 查找使用不同于25的端口的smtp服务器
  • 使用学校网络的官方SMTP服务器。因为人们需要发送邮件,所以总是有一个
  • 使用此类:

    我使用的示例代码:

    require("smtp/smtp.php");
    require("sasl/sasl.php");
    $from = 'youraddress@gmail.com';
    $to = 'some@email.com';
    
    $smtp=new smtp_class;
    $smtp->host_name="smtp.gmail.com";
    $smtp->host_port='465';
    $smtp->user='youraddress@gmail.com';
    $smtp->password='XXXXXXXXX';
    $smtp->ssl=1;
    $smtp->debug=1;       //0 here in production
    $smtp->html_debug=1; //same
    
    $smtp->SendMessage($from,array($to),array(
    "From: $from",
    "To: $to",
    "Subject: Testing Manuel Lemos' SMTP class",
    "Date: ".strftime("%a, %d %b %Y %H:%M:%S %Z")
    ),
    "Hello $to,\n\nIt is just to let you know that your SMTP class is working just fine.\n\nBye.\n"));
    
    我总是使用gmail作为SMTP服务器发送邮件

    配置非常简单

    是的,我太傻了。不管怎样,我从哪里得到sasl.php文件?您链接的页面上仅包含smtp.php。或者它已经在我的服务器上了?我启用了SASL,并使用Ubuntu教程为我的postfix服务器启用SMTP和SASL授权。谢谢SASL包的链接就在那个页面的某个地方。这里是直接链接:当我试图从你提供的链接解压下载时,它说这是一个坏的zip文件,因为它有一个额外的字节或类似的东西。我正在使用Ubuntu10.10。我刚刚在我的Mac上试用过,效果很好。不知道为什么它不能在我的服务器上工作。
    require("smtp/smtp.php");
    require("sasl/sasl.php");
    $from = 'youraddress@gmail.com';
    $to = 'some@email.com';
    
    $smtp=new smtp_class;
    $smtp->host_name="smtp.gmail.com";
    $smtp->host_port='465';
    $smtp->user='youraddress@gmail.com';
    $smtp->password='XXXXXXXXX';
    $smtp->ssl=1;
    $smtp->debug=1;       //0 here in production
    $smtp->html_debug=1; //same
    
    $smtp->SendMessage($from,array($to),array(
    "From: $from",
    "To: $to",
    "Subject: Testing Manuel Lemos' SMTP class",
    "Date: ".strftime("%a, %d %b %Y %H:%M:%S %Z")
    ),
    "Hello $to,\n\nIt is just to let you know that your SMTP class is working just fine.\n\nBye.\n"));