如何在 PHPMailer 中指定 SMTP 服务器?

Posted

技术标签:

【中文标题】如何在 PHPMailer 中指定 SMTP 服务器?【英文标题】:How to specify the SMTP server in PHPMailer? 【发布时间】:2014-08-03 06:54:21 【问题描述】:

我想知道如何让 SMTP 服务器使用 phpMailer 来使用我创建的电子邮件 (email@mydomain.com) 发送自动电子邮件。

我的虚拟主机没有提供。我在OnlyDomains 带来了我的域名,我的虚拟主机是000Webhost

<?php
require './PHPMailer-master/PHPMailerAutoload.php';

$mail = new PHPMailer;

$mail->isSMTP();                                      // Set mailer to use SMTP
$mail->Host = '';  // Specify main and backup SMTP servers
$mail->SMTPAuth = true;                               // Enable SMTP authentication
$mail->Username = 'noreply@mydomain.com';                 // SMTP username
$mail->Password = '********';                           // SMTP password
$mail->SMTPSecure = 'tls';                            
$mail->From = 'noreply@mydomain.com';
$mail->FromName = 'Admin';
$mail->addAddress('sdfsdf@hotmail.com');               // Name is optional

$mail->WordWrap = 50;                                 // Set word wrap to 50 characters
$mail->ishtml(true);                                  // Set email format to HTML

$mail->Subject = 'swag';
$mail->Body    = 'This is the HTML message body <b>in bold!</b>';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

if(!$mail->send()) 
echo 'Message could not be sent.';
echo 'Mailer Error: ' . $mail->ErrorInfo;
 else 
echo 'Message has been sent';

?>

【问题讨论】:

您的托管服务是否有像 cpanel 这样的控制面板? 你应该看看他们是否在主机上使用sendmailsendmail 不需要 STMP。查看PHPMailer() 的文档和示例表明库中有一个isSendmail(); 方法。查看我的答案了解更多详情。 【参考方案1】:

您应该查看您的虚拟主机是否允许您在他们的系统上使用sendmailsendmail 不需要 STMP。他们很有可能会这样做,因为它是大多数 Linux/Unix 设置的标准部分。既然你说你的网络主机是000WebHost,看来他们确实支持使用sendmail

您可以使用 PHP 的 mail() 函数为您的访问者发送邮件……

但他们似乎也在their premium package 中提供 SMTP。

过去,我建议暂时不要担心 SMTP 并坚持使用 sendmail。查看PHPMailer 的文档,似乎该库可以使用sendmail

PHP mail() 函数通常通过本地邮件服务器发送, 通常在 Linux、BSD 和 OS X 上以 sendmail 二进制文件开头 平台,但是,Windows 通常不包含本地邮件 服务器; PHPMailer 的集成 SMTP 实现允许电子邮件 在没有本地邮件服务器的 Windows 平台上发送。

然后查看PHPMailer 存储库shows there is a sendmail example 中的examples/ 文件夹:

require '../PHPMailerAutoload.php';

//Create a new PHPMailer instance
$mail = new PHPMailer();

// Set PHPMailer to use the sendmail transport
$mail->isSendmail();

//Set who the message is to be sent from
$mail->setFrom('from@example.com', 'First Last');

//Set an alternative reply-to address
$mail->addReplyTo('replyto@example.com', 'First Last');

//Set who the message is to be sent to
$mail->addAddress('whoto@example.com', 'John Doe');

//Set the subject line
$mail->Subject = 'PHPMailer sendmail test';

//Read an HTML message body from an external file, convert referenced images to embedded,
//convert HTML into a basic plain-text alternative body
$mail->msgHTML(file_get_contents('contents.html'), dirname(__FILE__));

//Replace the plain text body with one created manually
$mail->AltBody = 'This is a plain-text message body';

//Attach an image file
$mail->addAttachment('images/phpmailer_mini.png');

//send the message, check for errors
if (!$mail->send()) 
    echo "Mailer Error: " . $mail->ErrorInfo;
 else 
    echo "Message sent!";

【讨论】:

以上是关于如何在 PHPMailer 中指定 SMTP 服务器?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 PHPMailer 无法连接到我的 SMTP 服务器

Lumen phpmailer:SMTP错误:无法连接到服务器:

PHPMailer GoDaddy 服务器 SMTP 连接被拒绝

SMTP connect()失败。 https://github.com/PHPMailer/PHPMailer/wiki/Troubleshooting

PHPMailer:使用远程SMTP服务器,在localhost下工作,远程服务器上的Connection refused(111)

PHPmailer:SMTP 连接()失败(不工作)