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

时间:2011-04-22 19:50:34

标签: php smtp gmail pear

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

我对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, $);

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

4 个答案:

答案 0 :(得分:3)

使用此课程: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"));

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分:0)

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

您有两种选择:

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

答案 3 :(得分:0)

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