阿里云使用SSL加密465端口发送邮件样例及Demo

阿里云使用SSL加密465端口发信样例及Demo

 

   

适用场景

因服务器的25端口默认封闭,需要使用SSL加密端口(通常是465)来对外发信,以下样例适用于程序调用外部邮箱发信的场景,调用的邮箱服务器需要支持SSL加密。这里介绍.NET和PHP的样例,其他语言实现方法思路基本相同。

基本原理

通过连接外部邮箱的发信服务器,并通过程序配置的账号密码鉴权验证来发送邮件,而不是服务器本身来发送邮件。基本原理与本地电脑使用outlook等客户端连接邮箱服务器发送邮件一致。

实现要点

基本实现方式与连接25端口发送邮件一致,但改为SSL加密协议后,需要特别注意:

  • 将连接外部邮箱服务器的端口改为邮箱服务器的SSL加密端口(通常是465端口),具体配置可以与邮箱服务商咨询。
  • 在程序中启用SSL加密协议连接邮箱服务器。

具体实现

截取部分源代码样例如下:

MailMessage mmsg = new MailMessage();
//邮件主题
mmsg.Subject = "主题";
mmsg.BodyFormat = MailFormat.Html;
//邮件正文
mmsg.Body = "正文";
//正文编码
mmsg.BodyEncoding = Encoding.UTF8;
//优先级
mmsg.Priority = MailPriority.High;
//发件者邮箱地址
mmsg.From = "xxxxxx";
//收件人收箱地址
mmsg.To = "xxxxxx";
mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1");
//用户名
mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "xxxxxx");
//密码
mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "xxxxxx");
//端口
mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 465);
//使用SSL mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", "true");
//Smtp服务器
System.Web.Mail.SmtpMail.SmtpServer = "smtp.xx.com";
SmtpMail.Send(mmsg);

Demo下载

可将以上Demo上传至服务器测试发信是否能够成功。

PHP源代码及Demo

截取部分源代码样例如下

<?php
require 'PHPMailerAutoload.php';
require_once('class.phpmailer.php');
require_once("class.smtp.php");
$mail = new PHPMailer();
$mail->CharSet ="UTF-8"; //设定邮件编码,默认ISO-8859-1,如果发中文此项必须设置为 UTF-8
$mail->IsSMTP(); // 设定使用SMTP服务
$mail->SMTPAuth = true; // 启用 SMTP 验证功能
$mail->SMTPSecure = "ssl"; // 启用SSL
$mail->SMTPDebug = 2;
$mail->Host = "smtp.xxx.com"; // SMTP 服务器
$mail->Port = 465; // SMTP服务器的端口号
$mail->Username = "xxx@xxx.com"; // SMTP服务器用户名
$mail->Password = "xxx"; // SMTP服务器密码
$mail->SetFrom('xxx@xxx.com', 'qq'); // 设置发件人地址和名称
$mail->AddReplyTo("xxx@xxx.com","xxx@xxx.com");
// 设置邮件回复人地址和名称
$mail->Subject = 'xxx'; // 设置邮件标题
$mail->AltBody = "为了查看该邮件,请切换到支持 HTML 的邮件客户端";
// 可选项,向下兼容考虑
$mail->MsgHTML('<html>helo</html>'); // 设置邮件内容
$mail->AddAddress('xxx@xxx.com', "xxx@xxx.com");
//$mail->AddAttachment("images/phpmailer.gif"); // 附件
if(!$mail->Send()) {
echo "发送失败:" . $mail->ErrorInfo;
} else {
echo "恭喜,邮件发送成功!";
}
?>

Demo下载

可将以上Demo上传至服务器测试发信是否能够成功。

ASP源代码及Demo

<%
Set Mail = CreateObject("CDO.Message")
Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") ="smtp.126.com"
Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 465
Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = 1
Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 60
Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") ="xxx@126.com"
Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") ="xxxxx"
Mail.Configuration.Fields.Update
Mail.Subject="Email subject"
Mail.From="xxxxx"
Mail.To="xxxx"
Mail.TextBody="This is an email message."
Mail.Send
Set Mail = Nothing
%>
<%="发送成功!!!"%>

Demo下载

调试方法

  1. 联系邮箱服务商拿到使用SSL加密方式发信的设置。通常包含:
    • 发信服务器地址,如smtp.xx.com
    • 发信服务器端口号,加密端口一般是465,普通端口25
    • 邮箱用户名,可能是email地址,也可能是email地址前缀,具体可咨询邮箱服务商
    • 邮箱客户端密码,部分邮箱服务商Web浏览器登录界面的登录密码和客户端密码并不相同,可能需要单独设置,具体可咨询邮箱服务商。
  2. 在本地电脑使用客户端软件(Outlook,Foxmail等),使用上述拿到的配置来设置本地客户端,并发信测试,如果不能发送,也需要联系邮箱服务商。具体配置方法略。这步主要是验证第1步拿到的配置是否正确,如果配置不正确,本地发信就会报错。

  3. 把程序中的邮箱服务器配置项按照上述测试通过的配置来编写,并实际发信测试。

Comments are closed, but trackbacks and pingbacks are open.