2011-04-22 82 views
3

我有一个问题,我一直在努力约一个星期,无法找到答案。作为这一切的前言,我在网上搜索了各种各样的东西。这个问题有很多答案,但似乎没有人帮助我。使用Gmail SMTP与PHP发送电子邮件

我对PHP有点新鲜,以及我所要求的很多东西(过去几个月一直在使用它)。让我来解决问题的基础:

我在一个学校网络上,在我的宿舍里设置了自己的服务器。我正在创建一个网站,我需要验证用户的电子邮件,但基本的PHP邮件()函数不起作用。我被告知我需要使用SMTP。所以我决定使用Gmail SMTP最简单,最便宜的方式。出于这个原因,我在Gmail上创建了一个名为[email protected]的帐户。这是代码。

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

echo "1"; 

$from = "PersonA `<[email protected]`>"; $to = "`<[email protected]`>"; $subject = "Activate your account"; $body = "Hey"; 

$host = "ssl://smtp.gmail.com"; $port = "465"; //also tried 587 $username = "[email protected]"; $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, $); 

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

回答

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 = '[email protected]'; 
$to = '[email protected]'; 

$smtp=new smtp_class; 
$smtp->host_name="smtp.gmail.com"; 
$smtp->host_port='465'; 
$smtp->user='[email protected]'; 
$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")); 
+0

是的,这是愚蠢的我。反正,我在哪里得到sasl.php文件?只有您链接的页面上包含smtp.php。或者它已经在我的服务器上了?我启用了SASL,并使用Ubuntu教程为我的后缀服务器启用SMTP和SASL授权。谢谢! – ingshtrom 2011-04-25 01:57:13

+0

SASL包的链接位于该页面的某处。以下是直接链接:http://www.phpclasses.org/package/1888-PHP-Single-API-for-standard-authentication-mechanisms。html – Jorj 2011-05-12 11:51:31

0

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

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

的原因是,你的PHP脚本可以柜面超时有一个延迟接触的Gmail。因此,您可以使用Postfix将电子邮件排队到本地服务器上,让PHP脚本执行死机并且信任Postfix通过Gmail发送电子邮件。

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

0

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

你有两个选择:

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

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

+0

当我试图从你提供的链接中解压缩下载时,它说它是一个不好的zip文件,因为它有一个额外的字节或类似的东西。我正在使用Ubuntu 10.10。 – ingshtrom 2011-04-25 02:01:43

+0

它在我的笔记本电脑上正常工作。 – 2011-04-25 16:35:59

+0

我刚刚在我的Mac上试过,它工作正常。不知道为什么它不能在我的服务器上工作。 – ingshtrom 2011-04-26 00:07:19

相关问题