使用 GMail SMTP 服务器从 PHP 页面发送电子邮件
我正在尝试让它工作。根据给定链接中的答案"这是工作代码,所以使用它"。除非它对我不起作用。
特别:
<?php
require_once "Mail.php";
$from = "<xxxxx.gmail.com>";
$to = "<xxxxx.gmail.com>";
$subject = "Hi!";
$body = "Hi,'n'nHow are you?";
$host = "smtp.gmail.com";
$port = "465";
$username = "xxxxx@gmail.com";
$password = "*****";
$headers = array ('From' => $from,
'To' => $to,
'Subject' => $subject);
$smtp = Mail::factory('smtp',
array ('host' => $host,
'port' => $port,
'auth' => true,
'username' => $username,
'password' => $password));
$mail = $smtp->send($to, $headers, $body);
if (PEAR::isError($mail)) {
echo("<p>" . $mail->getMessage() . "</p>");
} else {
echo("<p>Message successfully sent!</p>");
}
?> <!-- end of php tag-->
生产:
严格的标准:非静态方法 邮件::工厂() 不应该 在第 23 行的 F:''xampp''htdocs''test''index.php 中静态调用
严格的标准:非静态方法PEAR::isError()不应该 静态调用,假设$this来自不兼容的上下文 F:''xampp''php''PEAR''Mail''smtp.php 在第 365 行
严格的标准:非静态方法PEAR::isError()不应该 静态调用,假设$this来自不兼容的上下文 F:''xampp''php''PEAR''Net''SMTP.php 在第 450 行
严格的标准:非静态方法PEAR::isError()不应该 静态调用,假设$this来自不兼容的上下文 F:''xampp''php''PEAR''Net''SMTP.php 在第 467 行
虽然 phpinfo() 给出了注册的套接字:
TCP, UDP, SSL, SSLV3, SSLV2, TLS
但最重要的是,没有发送电子邮件。
尝试在$from
和$to
中设置正确的电子邮件地址
'PeterMorgan@gmail.com' instead of '<PeterMorgan.gmail.com>'
来自梨邮件文档:
include('Mail.php');
$recipients = 'joe@example.com';
$headers['From'] = 'richard@example.com';
$headers['To'] = 'joe@example.com';
$headers['Subject'] = 'Test message';
$body = 'Test message';
$params = ... // set smtp values here
// http://pear.php.net/manual/en/package.mail.mail.factory.php
$mail_object =& Mail::factory('smtp', $params);
$mail_object->send($recipients, $headers, $body);
解决了问题。对于GMail,他们在他们的网站上说:
TLS/STARTTLS的端口:587
SSL端口:465
如果您在发送邮件时遇到问题,但已确认邮件客户端中的 SMTP 加密处于活动状态,请尝试配置您的 SMTP 服务器位于其他端口(465 或 587)上。
所以我将端口从 465 更改为 587,即使我使用的是 SSL。我不知道为什么这对我有用,但它确实如此。