网站要进行邮件发送,主要有2中方式,1:在服务器安装sendmail或者其他邮件服务器拓展,将服务器作为邮件发送服务器。2:利用中间服务器(腾讯邮箱的smtp服务器等)进行邮件发送。
最近我把一个网站架设在阿里云服务器上,然后网站需要进行邮件群发。本来打算通过第一种方式进行操作的,后来发现阿里云并不支持用户把云服务器架设成邮件服务器。(具体原因不得而知,或许只是为了多卖一些云邮件服务器吧)
而我们能操作的有3中办法:1、买阿里云邮件服务 ;2、通过465端口(安全起见,阿里云默认关闭25端口,而465端口就和22端口一样,通常都默认开启的)和 腾讯企业邮箱的smtp服务器进行邮件转发(链接);3、解封25端口,依然通过腾讯企业邮箱smtp服务器进行转发。
基于不费事和省钱的原则我选择第二种。
阿里云推荐了一个非常好用的 邮件发送类 phpmailer 让我们来进行邮件发送。(phpmailer 好像也兼容sendmail本地服务器,待测试)
通常情况php发送邮件我们会习惯性使用mail()函数,但 mail()函数需要服务器安装 sendmail服务(或其他服务)来支持。而且如果你要进行较为复杂的邮件发送,需要很难的配置,而且没有足够好用的参考文档(都太简单了)。
我们只想通过腾讯的smtp服务器来进行中转发信,所以phpmailer 或者其他的 邮件类 是更好的一个解决方案。
下面记录下操作步奏:
1、下载类文件 phpmailer
2、使用 phpinfo() 函数查看 socket 和 openssl 扩展信息,如果没有要安装
openssl 如果没有开启请打开php.ini文件进行开启
首先检查php.ini中;extension=php_openssl.dll是否存在, 如果存在的话去掉前面的注释符‘;’, 如果不存在这行,那么添加extension=php_openssl.dll。
3、获取smtp服务器地址和端口
由于我们采用的是腾讯企业邮箱,比较简单,默认开启了相关服务,直接把资料拷贝到我们源码中备用即可。
如果是qq邮箱,需要获取授权码,我的腾讯企业邮箱直接用账号密码就可以了。
4、源码配置
// 引入PHPMailer的核心文件
require_once("PHPMailer/class.phpmailer.php");
require_once("PHPMailer/class.smtp.php");
//或者通过autoload自动载入
require 'PHPMailer/PHPMailerAutoload.php';
// 实例化PHPMailer核心类
$mail = new PHPMailer(true);
try{
// 是否启用smtp的debug进行调试 开发环境建议开启 生产环境注释掉即可 默认关闭debug调试模式
$mail->SMTPDebug = 2;
// 设置发送的邮件的编码
$mail->CharSet = 'UTF-8';
// 设定使用SMTP服务
$mail->isSMTP();
// 启用 SMTP 验证功能 如果使用smtp 这个必须是true
$mail->SMTPAuth = true;
// 设置使用ssl加密方式登录鉴权
$mail->SMTPSecure = 'ssl';
// SMTP 服务器和备用服务器
$mail->Host = 'smtp.exmail.qq.com;smtp2.example.com';
// 设置ssl连接smtp服务器的远程服务器端口号
$mail->Port = 465;
// smtp登录的账号 我的企业邮箱
$mail->Username = '*****@****.com.cn';
// smtp登录的密码 我的企业邮箱密码
$mail->Password = '**********';
// 设置发件人地址和名称
$mail->SetFrom('*****@****.com.cn', '发件人昵称');
// 设置邮件回复人地址和名称
$mail->AddReplyTo("*****@****.com.cn","发件人昵称");
// 设置收件人邮箱地址
$mail->addAddress('321@qq.com','收件人昵称');
$mail->addAddress('123@qq.com');
// 添加多个收件人 则多次调用方法即可
$mail->addAddress('87654321@163.com');
//添加抄送
$mail->addCC('cc@example.com');
// 邮件正文是否为html编码
$mail->isHTML(true);
// 添加该邮件的主题
$mail->Subject = '邮件主题';
// 可选项,向下兼容考虑
$mail->AltBody = "为了查看该邮件,请切换到支持 HTML 的邮件客户端";
// 添加邮件正文
$mail->Body = '<h1>Hello World</h1>';
// 为该邮件添加附件
$mail->addAttachment('./example.pdf');
// 发送邮件 返回状态
$status = $mail->send();
}
catch (Exception $e)
{
echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
}