使用SSL加密465端口發(fā)送郵件
基于安全考慮,云虛擬主機的25端口默認封閉,如果您有發(fā)送郵件的需求,建議使用SSL加密端口(465端口)來對外發(fā)送郵件。本文通過提供.NET、PHP和ASP樣例來介紹使用SSL加密端口發(fā)送郵件的方法,其他語言的實現(xiàn)思路與本文介紹的方法基本相同。
背景信息
基本原理
使用SSL加密端口發(fā)送郵件的基本原理與本地主機使用客戶端(例如Outlook等)連接郵箱服務(wù)器發(fā)送郵件一致。即主機通過連接外部郵箱的發(fā)郵件服務(wù)器,并通過程序配置的賬號密碼鑒權(quán)驗證來發(fā)送郵件,而不是服務(wù)器本身來發(fā)送郵件。
實現(xiàn)要點
使用SSL加密端口發(fā)送郵件的基本實現(xiàn)方式與使用25端口發(fā)送郵件一致,但改為SSL加密協(xié)議后,需要特別注意以下幾點:
編寫好的程序調(diào)用外部郵箱發(fā)送郵件時,郵箱服務(wù)器需支持SSL加密功能。
主機連接郵箱服務(wù)器時,請在編寫好的程序中啟用SSL加密協(xié)議。
將連接外部郵箱服務(wù)器的端口改為SSL加密端口(465端口),具體配置信息可以向郵箱服務(wù)商咨詢。
使用限制
Windows操作系統(tǒng)增強版云虛擬主機不支持發(fā)送郵件。
前提條件
確認PHP函數(shù)的fsockopen
參數(shù)為啟動狀態(tài)。
PHP函數(shù)的fsockopen
參數(shù)默認為啟動狀態(tài)。如需修改該參數(shù)狀態(tài),具體操作,請參見設(shè)置PHP.INI參數(shù)。
操作步驟
聯(lián)系郵箱服務(wù)商獲取使用SSL加密方式發(fā)送郵件的配置信息。
涉及的主要配置項如下所示:
配置項
說明
發(fā)郵件服務(wù)器地址
輸入服務(wù)器郵箱地址。例如,a***.example.com。
發(fā)郵件服務(wù)器端口號
加密端口一般是465端口。
郵箱用戶名
可能是Email地址,也可能是Email地址前綴,具體可咨詢郵箱服務(wù)商。
郵箱客戶端密碼
部分郵箱服務(wù)商Web瀏覽器登錄界面的登錄密碼和客戶端密碼并不相同,可能需要單獨設(shè)置,具體可咨詢郵箱服務(wù)商。
在本地主機使用客戶端軟件(Outlook、Foxmail等),使用已獲取的郵件配置信息設(shè)置本地客戶端,并發(fā)送郵件測試。
說明如果郵件發(fā)送失敗,表示獲取的配置信息不正確,您需要聯(lián)系郵箱服務(wù)商解決。
根據(jù)實際的開發(fā)語言選擇對應(yīng)的程序樣例,并將程序樣例下載到本地。
程序樣例如下所示:
截取部分源程序樣例如下:
MailMessage mmsg = new MailMessage(); mmsg.Subject = "主題"; //郵件主題 mmsg.BodyFormat = MailFormat.Html; mmsg.Body = "正文"; //郵件正文 mmsg.BodyEncoding = Encoding.UTF8; //正文編碼 mmsg.Priority = MailPriority.High; //優(yōu)先級 mmsg.From = "a***@example.com"; //發(fā)件人郵箱地址 mmsg.To = "b***@example.com"; //收件人郵箱地址 mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1"); mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendusername", "test01"); //用戶名 mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/sendpassword", "123****"); //密碼 mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpserverport", 465); //端口 mmsg.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpusessl", "true"); //使用SSL System.Web.Mail.SmtpMail.SmtpServer = "smtp.****.com"; //smtp服務(wù)器 SmtpMail.Send(mmsg);
截取部分源程序樣例如下:
<?php require 'PHPMailerAutoload.php'; require_once('class.phpmailer.php'); require_once("class.smtp.php"); $mail = new PHPMailer(); $mail->CharSet="UTF-8"; //設(shè)定郵件編碼,默認ISO-8859-1,如果發(fā)中文此項必須設(shè)置為 UTF-8 $mail->IsSMTP(); //設(shè)定使用SMTP服務(wù) $mail->SMTPAuth = true; //啟用SMTP驗證功能 $mail->SMTPSecure = "ssl"; //啟用SSL $mail->SMTPDebug = 2; $mail->Host = "smtp.****.com"; //SMTP服務(wù)器 $mail->Port = 465; //SMTP服務(wù)器的端口號 $mail->Username = "test01"; //SMTP服務(wù)器用戶名 $mail->Password = "123****"; //SMTP服務(wù)器密碼 $mail->SetFrom('a***@example.com', 'a***'); //設(shè)置發(fā)件人地址和名稱 $mail->AddReplyTo("b***@example.com","b***"); //設(shè)置郵件回復(fù)人地址和名稱 $mail->Subject = '郵件標(biāo)題'; //設(shè)置郵件標(biāo)題 $mail->AltBody = "為了查看該郵件,請切換到支持HTML的郵件客戶端"; //可選項,向下兼容考慮 $mail->MsgHTML('<html>helo</html>'); //設(shè)置郵件內(nèi)容 $mail->AddAddress('c***@example.com', "c***"); $mail->AddAttachment("images/phpmailer.gif"); //附件 if(!$mail->Send()) { echo "發(fā)送失敗:" . $mail->ErrorInfo; } else { echo "恭喜,郵件發(fā)送成功!"; } ?>
截取部分源程序樣例如下:
<% 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.****.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") ="test01" Mail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") ="123****" Mail.Configuration.Fields.Update Mail.Subject="Email subject" Mail.From="a***@example.com" Mail.To="b***@example.com" Mail.TextBody="This is an email message." Mail.Send Set Mail = Nothing %> <%="發(fā)送成功!!!"%>
使用已通過測試的配置信息,編寫程序樣例中的郵箱服務(wù)器配置項。
將編寫好的程序通過FileZilla工具上傳到云虛擬主機上,并實際發(fā)送郵件測試。
程序上傳到云虛擬主機的具體操作,請參見通過FileZilla管理網(wǎng)站程序文件。