SMTP服务器:smtp.exmail.qq.com 端口:465 安全:SSL 用户名:admin@company.com 密码:邮箱授权码 发送邮箱:admin@company.com 接收邮箱:test@xxx.com
【开始连接SMTP服务器 smtp.exmail.qq.com:465 SSL】 连接握手成功 账号验证通过 正在发送邮件至 test@xxx.com 邮件发送完成,无报错!
【连接失败】535 Authentication failed 账号或授权码不正确,请检查密码输入
前端点击执行,POST JSON参数到后端接口,后端使用SmtpClient发送邮件,返回执行日志。
// .NET Framework4.5 WebForm 一般处理程序 MailHandler.ashx
using System;
using System.Net;
using System.Net.Mail;
using System.Web;
using Newtonsoft.Json;
public class MailHandler : IHttpHandler
{
public bool IsReusable => false;
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "application/json";
var req = context.Request;
string json = new System.IO.StreamReader(req.InputStream).ReadToEnd();
var model = JsonConvert.DeserializeObject(json);
string result = "";
try
{
SmtpClient smtp = new SmtpClient(model.SmtpHost, int.Parse(model.SmtpPort));
if(model.SecureType == "SSL")
smtp.EnableSsl = true;
smtp.Credentials = new NetworkCredential(model.User, model.Pwd);
MailMessage mail = new MailMessage(model.SendMail, model.RecvMail);
mail.Subject = "SMTP测试邮件";
mail.Body = "这是SMTP工具测试发送的邮件";
smtp.Send(mail);
result = "【发送成功】邮件已投递至收件箱";
}
catch(Exception ex)
{
result = $"【发送失败】{ex.Message}";
}
context.Response.Write(JsonConvert.SerializeObject(new {Msg = result}));
}
}
// 参数实体
public class SmtpModel
{
public string SmtpHost { get; set; }
public string SmtpPort { get; set; }
public string SecureType { get; set; }
public string User { get; set; }
public string Pwd { get; set; }
public string SendMail { get; set; }
public string RecvMail { get; set; }
}
1. 25端口多数云服务器被防火墙封禁,优先使用465 SSL端口;
2. QQ、163个人邮箱不支持登录密码,必须在邮箱后台开启POP3/SMTP并生成授权码;
3. 发送邮箱必须和登录用户名保持一致,否则服务器会拒绝发送;
4. 云服务器安全组需要放行465出站端口,否则无法连接SMTP服务器;
5. 前端不能直接发送邮件,必须通过后端接口中转,页面仅做参数收集。