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

发布于 2024-11-03 02:27:49 字数 2106 浏览 4 评论 0原文

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

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

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

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

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

I have a problem I have been working on for about a week and can't find an answer. As a preface to this all, I have searched the internet for all sorts of things. There are a lot of answers for this problem, but none seem to be helping me.

I am somewhat new to PHP and a lot of the stuff I am asking for (been using it over the past few months). Let me get to the base of the problem:

I am on a school network with my own server set up in my dorm room. I am creating a website where I need to verify a user's email, but the basic PHP mail() function does not work. I have been told that I will need to use SMTP. So I decided the easiest and cheapest way was with Gmail SMTP. I created an account on Gmail called [email protected] for this reason. Here is the code.

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

So basically the code just stops at the line:

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

I have tried printing errors, but I just have no idea what to do now. Any tips and help is appreciated. Thanks!!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

听不够的曲调 2024-11-10 02:27:49

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

Use this class: http://www.phpclasses.org/package/14-PHP-Sends-e-mail-messages-via-SMTP-protocol.html

The sample code I use:

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"));
寄意 2024-11-10 02:27:49

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

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

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

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

If you are you using Linux I recommend setting up postfix on your local machine and they asking that to relay the email forwards via an external SMTP service, in your case Gmail.

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

The reason is that your PHP script can timeout incase there's a delay contact Gmail. So you would use Postfix to queue the email on the local server, let the PHP script execution die and trust Postfix to send the email via Gmail.

If you are using Windows, I am sure you can find an equivalent SMTP relay application (should be built as a rough guess).

骄兵必败 2024-11-10 02:27:49

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

您有两种选择:

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

Many public networks block connections on the SMTP port to remote machines to stop spammers inside their network.

You have two choices:

  1. Find a smtp server that uses a different port than 25
  2. Use the official SMTP server of your school's network. There is always one since people need to send mails out.
冰葑 2024-11-10 02:27:49

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

I always use this to send mails using gmail as SMTP server.
Very Simple to configure

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文