php 发送邮件:PHPMailer, 利用PHPMailer发送邮件, gmail, qq 邮箱, yahoo邮箱, yeah.net,1&1 (1and1), hotmail, 163邮箱,Outlook

 

参考:PHPMailer 报错 SMTP Error: Could not authenticate. , Less secure app access, PHPMailer error: SMTP Error: Could not authenticate. Error: SMTP Error: Could not authenticate

 

phpMailer 是一个非常强大的 ph p发送邮件类,可以设定发送邮件地址、回复地址、邮件主题、html网页,上传附件,并且使用起来非常方便。

phpMailer 的特点:

  • 1、在邮件中包含多个 TO、CC、BCC 和 REPLY-TO。
  • 2、平台应用广泛,支持的 SMTP 服务器包括 Sendmail、qmail、Postfix、Gmail、Imail、Exchange 等等。
  • 3、支持嵌入图像,附件,HTML 邮件。
  • 4、可靠的强大的调试功能。
  • 5、支持 SMTP 认证。
  • 6、自定义邮件头。
  • 7、支持 8bit、base64、binary 和 quoted-printable 编码。

 

phpmailer 安装或者下载方式:

1、从 github 上下载: https://github.com/PHPMailer/PHPMailer/

2、使用 composer 安装:

composer require phpmailer/phpmailer

 

课程特色

  • 可能是世界上最受欢迎的PHP发送电子邮件代码!
  • 被许多开源项目使用:WordPress,Drupal,1CRM,SugarCRM,Yii,Joomla!还有很多
  • 集成SMTP支持 – 无需本地邮件服务器即可发送
  • 发送包含多个To,CC,BCC和Reply-to地址的电子邮件
  • 不读取HTML电子邮件的邮件客户端的多部分/备用电子邮件
  • 添加附件,包括内联
  • 支持UTF-8内容和8bit,base64,二进制和可引用打印的编码
  • 通过SSL和SMTP + STARTTLS传输使用LOGIN,PLAIN,CRAM-MD5和XOAUTH2机制进行SMTP身份验证
  • 自动验证电子邮件地址
  • 防止标头注入攻击
  • 超过50种语言的错误消息!
  • DKIM和S / MIME签名支持
  • 兼容PHP 5.5及更高版本
  • 命名空间以防止名称冲突
  • 多得多!

 

为什么你可能需要它

许多PHP开发人员在其代码中使用电子邮件 支持此功能的唯一PHP函数是该mail()函数。但是,它没有为使用基于HTML的电子邮件和附件等流行功能提供任何帮助。

正确格式化电子邮件非常困难。有无数重叠的RFC,需要严格遵守非常复杂的格式和编码规则 – 你可以在网上找到mail()直接使用该函数的绝大多数代码都是完全错误的! 不要自己动手做 – 如果你不使用PHPMailer,那么在推出自己的软件之前还应该看看许多其他优秀的库 – 试试SwiftMailerZend / MaileZcomponents等。

PHP mail()函数通常通过本地邮件服务器发送,通常由sendmailLinux,BSD和OS X平台上的二进制文件提供,但Windows通常不包括本地邮件服务器; PHPMailer的集成SMTP实现允许在没有本地邮件服务器的Windows平台上发送电子邮件。

 

一个简单的例子

<?php
// Import PHPMailer classes into the global namespace
// These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;

// Load Composer's autoloader
require 'vendor/autoload.php';

// Instantiation and passing `true` enables exceptions
$mail = new PHPMailer(true);

try {
    //Server settings
    $mail->SMTPDebug = 2;                                       // Enable verbose debug output
    $mail->isSMTP();                                            // Set mailer to use SMTP
    $mail->Host       = 'smtp1.example.com;smtp2.example.com';  // Specify main and backup SMTP servers
    $mail->SMTPAuth   = true;                                   // Enable SMTP authentication
    $mail->Username   = 'user@example.com';                     // SMTP username
    $mail->Password   = 'secret';                               // SMTP password
    $mail->SMTPSecure = 'tls';                                  // Enable TLS encryption, `ssl` also accepted
    $mail->Port       = 587;                                    // TCP port to connect to

    //Recipients
    $mail->setFrom('from@example.com', 'Mailer');
    $mail->addAddress('joe@example.net', 'Joe User');     // Add a recipient
    $mail->addAddress('ellen@example.com');               // Name is optional
    $mail->addReplyTo('info@example.com', 'Information');
    $mail->addCC('cc@example.com');
    $mail->addBCC('bcc@example.com');

    // Attachments
    $mail->addAttachment('/var/tmp/file.tar.gz');         // Add attachments
    $mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Optional name

    // Content
    $mail->isHTML(true);                                  // Set email format to HTML
    $mail->Subject = 'Here is the subject';
    $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';

    $mail->send();
    echo 'Message has been sent';
} catch (Exception $e) {
    echo "Message could not be sent. Mailer Error: {$mail->ErrorInfo}";
}

 

PHPMailer代码示例

此文件夹包含一组使用PHPMailer的示例。

 

关于测试邮件发送

在处理电子邮件发送代码时,您会发现自己担心如果所有这些测试电子邮件都发送到您的邮件列表会发生什么。解决方案是使用虚假的邮件服务器,就像真实的东西一样,但实际上并没有发送任何东西。有些提供Web界面,反馈,日志记录,返回特定错误代码的能力,所有对测试错误处理,身份验证等有用的东西。这里有一些您可能想尝试的邮件测试工具:

  • FakeSMTP,一种Java桌面应用程序,能够显示SMTP日志并将消息保存到文件夹。
  • FakeEmail,一个基于Python的虚假邮件服务器,带有Web界面。
  • smtp-sink,Postfix邮件服务器的一部分,所以你可能已经安装了它。这在Travis-CI配置中用于运行PHPMailer的单元测试。
  • smtp4dev,一个用于Windows的虚拟SMTP服务器。
  • fakesendmail.sh,PHPMailer的测试设置的一部分,这是一个shell脚本,它模拟sendmail以测试PHPMailer中的’mail’或’sendmail’方法。
  • msglint,而不是邮件服务器,IETF的MIME结构分析器检查邮件的格式。

这些示例中的大多数都使用example.comexample.net域。这些域由IANA保留用于说明目的,如RFC 2606中所述。不要在示例中使用像’mydomain.com’或’somedomain.com’这样的虚构域名作为某人,某个地方,可能拥有它们!

 

安全说明

在Web服务器中运行这些示例之前,您需要使用“.php”扩展名重命名它们。它们以“.phps”文件的形式提供,通常由PHP语法突出显示而不是运行它们。如果您碰巧在实际站点上部署这些代码示例,这可以防止运行潜在的垃圾邮件网关代码时出现潜在的安全问题 – 请不要这样做!

同样,不要将密码留在这些文件中,因为它们对全世界都是可见的!

 

本土化

PHPMailer默认为英语,但在语言文件夹中,您会发现许多(在撰写本文时为48!)PHPMailer错误消息的翻译。它们的文件名包含用于翻译的ISO 639-1语言代码,例如fr法语。要指定一种语言,您需要告诉PHPMailer使用哪一种语言,如下所示

// To load the French version
$mail->setLanguage('fr', '/optional/path/to/language/directory/');

我们欢迎更正和新语言 – 如果您正在寻找更正,请在tests文件夹中运行PHPMailerLangTest.php脚本,它将显示任何缺少的翻译。

邮箱配置

QQ 邮箱相关配置如下图:

邮箱 POP3服务器(端口995) SMTP服务器(端口465或587)
qq.com pop.qq.com smtp.qq.com

 

当然除了网易和 QQ 邮箱其他邮箱也是可以的,下面给出 php 代码示例:

<?php 
use PHPMailer\PHPMailer\PHPMailer; 
use PHPMailer\PHPMailer\Exception; 

require './src/Exception.php'; 
require './src/PHPMailer.php'; 
require './src/SMTP.php'; 

$mail = new PHPMailer(true);                              // Passing `true` enables exceptions 
try { 
    //服务器配置 
    $mail->CharSet ="UTF-8";                     //设定邮件编码 
    $mail->SMTPDebug = 0;                        // 调试模式输出 
    $mail->isSMTP();                             // 使用SMTP 
    $mail->Host = 'smtp.163.com';                // SMTP服务器 
    $mail->SMTPAuth = true;                      // 允许 SMTP 认证 
    $mail->Username = '邮箱用户名';                // SMTP 用户名  即邮箱的用户名 
    $mail->Password = '密码或者授权码';             // SMTP 密码  部分邮箱是授权码(例如163邮箱) 
    $mail->SMTPSecure = 'ssl';                    // 允许 TLS 或者ssl协议 
    $mail->Port = 465;                            // 服务器端口 25 或者465 具体要看邮箱服务器支持 

    $mail->setFrom('xxxx@163.com', 'Mailer');  //发件人 
    $mail->addAddress('aaaa@126.com', 'Joe');  // 收件人 
    //$mail->addAddress('ellen@example.com');  // 可添加多个收件人 
    $mail->addReplyTo('xxxx@163.com', 'info'); //回复的时候回复给哪个邮箱 建议和发件人一致 
    //$mail->addCC('cc@example.com');                    //抄送 
    //$mail->addBCC('bcc@example.com');                    //密送 

    //发送附件 
    // $mail->addAttachment('../xy.zip');         // 添加附件 
    // $mail->addAttachment('../thumb-1.jpg', 'new.jpg');    // 发送附件并且重命名 

    //Content 
    $mail->isHTML(true);                                  // 是否以HTML文档格式发送  发送后客户端可直接显示对应HTML内容 
    $mail->Subject = '这里是邮件标题' . time(); 
    $mail->Body    = '<h1>这里是邮件内容</h1>' . date('Y-m-d H:i:s'); 
    $mail->AltBody = '如果邮件客户端不支持HTML则显示此内容'; 

    $mail->send(); 
    echo '邮件发送成功'; 
} catch (Exception $e) { 
    echo '邮件发送失败: ', $mail->ErrorInfo; 
}

发送完带附件的邮件界面如下:

php 发送邮件:PHPMailer, 利用PHPMailer发送邮件, gmail, qq 邮箱, yahoo邮箱, yeah.net
php 发送邮件:PHPMailer, 利用PHPMailer发送邮件, gmail, qq 邮箱, yahoo邮箱, yeah.net

 

发送之前需要拥有自己的邮件服务器,测试的时候其实用自己申请的免费邮箱最方便了,不需要自己再搭建服务器了,可能要配置邮箱的SMTP服务,大部分公共邮箱(163、qq等)为了安全默认是关闭的。

网易邮箱配置如下图:

php 发送邮件:PHPMailer, 利用PHPMailer发送邮件, gmail, qq 邮箱, yahoo邮箱, yeah.net
php 发送邮件:PHPMailer, 利用PHPMailer发送邮件, gmail, qq 邮箱, yahoo邮箱, yeah.net

qq邮箱

POP3/SMTP协议

接收邮件服务器:pop.exmail.qq.com ,使用SSL,端口号995
发送邮件服务器:smtp.exmail.qq.com ,使用SSL,端口号465
海外用户可使用以下服务器
接收邮件服务器:hwpop.exmail.qq.com ,使用SSL,端口号995
发送邮件服务器:hwsmtp.exmail.qq.com ,使用SSL,端口号465
IMAP协议
接收邮件服务器:imap.exmail.qq.com  ,使用SSL,端口号993
发送邮件服务器:smtp.exmail.qq.com ,使用SSL,端口号465
海外用户可使用以下服务器
接收邮件服务器:hwimap.exmail.qq.com ,使用SSL,端口号993
发送邮件服务器:hwsmtp.exmail.qq.com ,使用SSL,端口号465

 

Googlemail – Gmail

Server: Authentication: Port:
SMTP Server (Outgoing Messages) smtp.gmail.com SSL 465
smtp.gmail.com StartTLS 587
POP3 Server (Incoming Messages) pop.gmail.com SSL 995
Please make sure, that POP3 access is enabled in the account settings.
Login to your account and enable POP3.
You also need to enable “less secure apps” (third party apps) in the Gmail settings:
https://support.google.com/accounts/answer/6010255?hl=en
See also: How to enable IMAP/POP3/SMTP for Gmail account

 

 

Outlook.com

Server: Authentication: Port:
SMTP Server (Outgoing Messages) smtp.live.com StartTLS 587
POP3 Server (Incoming Messages) pop3.live.com SSL 995

 

Office365.com

Server: Authentication: Port:
SMTP Server (Outgoing Messages) smtp.office365.com StartTLS 587
POP3 Server (Incoming Messages) outlook.office365.com SSL 995
Note: If the above settings are not working for your account, then login to the outlook web app, go to the “Settings” > “Options” > “Account” > “My Account” > “Settings for POP and IMAP Access”.

 

Yahoo Mail

Server: Authentication: Port:
SMTP Server (Outgoing Messages) smtp.mail.yahoo.com SSL 465
POP3 Server (Incoming Messages) pop.mail.yahoo.com SSL 995

 

Yahoo Mail Plus

Server: Authentication: Port:
SMTP Server (Outgoing Messages) plus.smtp.mail.yahoo.com SSL 465
POP3 Server (Incoming Messages) plus.pop.mail.yahoo.com SSL 995

 

Yahoo UK

Server: Authentication: Port:
SMTP Server (Outgoing Messages) smtp.mail.yahoo.co.uk SSL 465
POP3 Server (Incoming Messages) pop.mail.yahoo.co.uk SSL 995

 

Yahoo Deutschland

Server: Authentication: Port:
SMTP Server (Outgoing Messages) smtp.mail.yahoo.com SSL 465
POP3 Server (Incoming Messages) pop.mail.yahoo.com SSL 995

 

Yahoo AU/NZ

Server: Authentication: Port:
SMTP Server (Outgoing Messages) smtp.mail.yahoo.com.au SSL 465
POP3 Server (Incoming Messages) pop.mail.yahoo.com.au SSL 995

 

O2

Server: Authentication: Port:
SMTP Server (Outgoing Messages) smtp.o2.ie 25
POP3 Server (Incoming Messages) pop3.o2.ie 110

 

O2.uk

Server: Authentication: Port:
SMTP Server (Outgoing Messages) smtp.o2.co.uk 25
POP3 Server (Incoming Messages) pop3.o2.co.uk 110

 

AOL.com

Server: Authentication: Port:
SMTP Server (Outgoing Messages) smtp.aol.com StartTLS 587
IMAP Server (Incoming Messages) pop.aol.com SSL 995

 

AT&T

Server: Authentication: Port:
SMTP Server (Outgoing Messages) smtp.att.yahoo.com SSL 465
POP3 Server (Incoming Messages) pop.att.yahoo.com SSL 995

 

NTL @ntlworld.com

Server: Authentication: Port:
SMTP Server (Outgoing Messages) smtp.ntlworld.com SSL 465
POP3 Server (Incoming Messages) pop.ntlworld.com SSL 995

 

BT Connect

Server: Authentication: Port:
SMTP Server (Outgoing Messages) pop3.btconnect.com 25
POP3 Server (Incoming Messages) mail.btconnect.com 110

 

BT Openworld

Server: Authentication: Port:
SMTP Server (Outgoing Messages) mail.btopenworld.com 25
POP3 Server (Incoming Messages) mail.btopenworld.com 110

 

BT Internet

Server: Authentication: Port:
SMTP Server (Outgoing Messages) mail.btinternet.com 25
POP3 Server (Incoming Messages) mail.btinternet.com 110

 

Orange

Server: Authentication: Port:
SMTP Server (Outgoing Messages) smtp.orange.net 25
POP3 Server (Incoming Messages) pop.orange.net 110

 

Orange.uk

Server: Authentication: Port:
SMTP Server (Outgoing Messages) smtp.orange.co.uk 25
POP3 Server (Incoming Messages) pop.orange.co.uk 110

 

Wanadoo UK

Server: Authentication: Port:
SMTP Server (Outgoing Messages) smtp.wanadoo.co.uk 25
POP3 Server (Incoming Messages) pop.wanadoo.co.uk 110

 

 

Hotmail

Server: Authentication: Port:
SMTP Server (Outgoing Messages) smtp.live.com SSL 465
POP3 Server (Incoming Messages) pop3.live.com SSL 995

 

O2 Online Deutschland

Server: Authentication: Port:
SMTP Server (Outgoing Messages) mail.o2online.de 25
POP3 Server (Incoming Messages) pop.o2online.de 110

 

T-Online Deutschland

Server: Authentication: Port:
SMTP Server (Outgoing Messages) securesmtp.t-online.de StartTLS 587
POP3 Server (Incoming Messages) securepop.t-online.de SSL 995

 

1&1 (1and1)

Server: Authentication: Port:
SMTP Server (Outgoing Messages) smtp.1and1.com StartTLS 587
POP3 Server (Incoming Messages) pop.1and1.com SSL 995

 

1&1 Deutschland

Server: Authentication: Port:
SMTP Server (Outgoing Messages) smtp.1und1.de StartTLS 587
POP3 Server (Incoming Messages) pop.1und1.de SSL 995

 

Comcast

Server: Authentication: Port:
SMTP Server (Outgoing Messages) smtp.comcast.net 587
POP3 Server (Incoming Messages) mail.comcast.net 110

 

Verizon

Server: Authentication: Port:
SMTP Server (Outgoing Messages) outgoing.verizon.net SSL 465
POP3 Server (Incoming Messages) incoming.verizon.net SSL 995

 

Verizon (Yahoo hosted)

Server: Authentication: Port:
SMTP Server (Outgoing Messages) outgoing.yahoo.verizon.net 587
POP3 Server (Incoming Messages) incoming.yahoo.verizon.net 110

 

zoho Mail

Server: Authentication: Port:
SMTP Server (Outgoing Messages) smtp.zoho.com SSL 465
IMAP Server (Incoming Messages) pop.zoho.com SSL 995

 

Mail .com

Server: Authentication: Port:
SMTP Server (Outgoing Messages) smtp.mail.com StartTLS 587
POP3 Server (Incoming Messages) pop.mail.com SSL 995

 

GMX .com

Server: Authentication: Port:
SMTP Server (Outgoing Messages) smtp.gmx.com SSL 465
POP3 Server (Incoming Messages) pop.gmx.com SSL 995

 

Net@ddress by USA.NET

Server: Authentication: Port:
SMTP Server (Outgoing Messages) smtp.postoffice.net SSL 465
POP3 Server (Incoming Messages) pop3.postoffice.net SSL 995

 

 

参考:PHPMailer 报错 SMTP Error: Could not authenticate. , Less secure app access, PHPMailer error: SMTP Error: Could not authenticate. Error: SMTP Error: Could not authenticate

 

本文:php 发送邮件:PHPMailer, 利用PHPMailer发送邮件, gmail, qq 邮箱, yahoo邮箱, yeah.net

One Comment

Leave a Reply