【问题标题】:Using Gmail SMTP to send email with PHP使用 Gmail SMTP 通过 PHP 发送电子邮件
【发布时间】:2011-08-11 04:37:25
【问题描述】:

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

我对 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.";

所以基本上代码就停在这一行:

$mail = $smtp->send($to, %headers, $);

我尝试过打印错误,但我现在不知道该怎么办。任何提示和帮助表示赞赏。谢谢!!

【问题讨论】:

    标签: php smtp gmail pear


    【解决方案1】:

    我总是使用 this 来使用gmail作为SMTP服务器发送邮件。
    配置非常简单

    【讨论】:

    • 当我尝试从您提供的链接中解压缩下载文件时,它说这是一个错误的 zip 文件,因为其中有一个额外的字节或类似的东西。我正在使用 Ubuntu 10.10。
    • 我刚在我的 Mac 上试了一下,效果很好。不知道为什么它在我的服务器上不起作用。
    【解决方案2】:

    使用这个类:http://www.phpclasses.org/package/14-PHP-Sends-e-mail-messages-via-SMTP-protocol.html

    我使用的示例代码:

    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"));
    

    【讨论】:

    • 是的,我太愚蠢了。无论如何,我在哪里可以获得 sasl.php 文件?您链接的页面中仅包含 smtp.php。或者它已经在我的服务器上?我已启用 SASL 并使用 Ubuntu 教程为我的 postfix 服务器启用 SMTP 和 SASL 授权。谢谢!
    • SASL 包的链接在该页面的某处。这是直接链接:phpclasses.org/package/…
    【解决方案3】:

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

    你有两个选择:

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

    【讨论】:

      【解决方案4】:

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

      http://bookmarks.honewatson.com/2008/04/20/postfix-gmail-smtp-relay/

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

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

      【讨论】:

        猜你喜欢
        • 2012-05-29
        • 2017-05-12
        • 2016-01-16
        • 1970-01-01
        • 2011-02-08
        • 2015-10-22
        • 2020-02-21
        • 1970-01-01
        • 2021-11-16
        相关资源
        最近更新 更多