在进行微信小程序以及手机app开发时,作为后端就需要进行接口的开发。
像平常一样部署的将数据以邮件形式发送
接口代码内容如下:
[WebMethod(Description = "下载到邮箱")]
public string SendQQMail(string key, string strto, string strfile, string strfileName)//key是为了安全校验,strto是接收者的邮箱,strfile为附件的路径,strfileName附件名称
{
string systemKey = "37a3ab25-cd1a-481b-a675-87161b20c19e";
if (key == systemKey)
{
try
{
string strFrom = "xxx@qq.com";
string strSubject = "发送测试";
string strFromName = "发送测试";
string strBody = "发送测试";
//企业邮箱smtp
string strSmtpServer = "smtp.qq.com";
string strFromPass = "xxxxxxx";//授权码
SmtpClient smtpClient = new SmtpClient();
smtpClient.EnableSsl = true;
smtpClient.UseDefaultCredentials = false;//先设置
smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network; //指定电子邮件发送方式
smtpClient.Host = strSmtpServer; //指定SMTP服务器
smtpClient.Credentials = new System.Net.NetworkCredential(strFrom, strFromPass); //用户名和授权码
// 发送邮件设置
//MailMessage mailMessage = new MailMessage(strFrom, strto); // 发送人和收件人
MailMessage mailMessage = new MailMessage();
//发件人地址
//如是自己,在此输入自己的邮箱
mailMessage.From = new MailAddress(strFrom, strFromName, Encoding.UTF8);
//收件人地址
mailMessage.To.Add(new MailAddress(strto));
// 添加附件
if (strfile != "")
{
{
Attachment mailAttach_1 = new Attachment(strfile);
if (strfile.Contains('.'))
{
mailAttach_1.Name = strfileName + strfile.Substring(strfile.LastIndexOf('.'));
}
else mailAttach_1.Name = strfileName + ".xlsx";
mailMessage.Attachments.Add(mailAttach_1);
}
mailMessage.Subject = strSubject; //主题
mailMessage.Body = strBody;//内容
mailMessage.BodyEncoding = Encoding.UTF8; //正文编码
mailMessage.IsBodyHtml = true; //设置为HTML格式
mailMessage.Priority = MailPriority.Low; //优先级
smtpClient.Send(mailMessage);
Console.WriteLine();
Console.ReadLine();
return "发送成功";
}
catch (Exception ex)
{
System.IO.StreamWriter file = new System.IO.StreamWriter("d:\\log.txt");
file.WriteLine(ex.StackTrace);
file.Close();
return ex.Message;
}
}
else
{
return "";
}
}
小程序在部署iis的时候需要tls协议,主流的邮箱服务商加密协议使用的都是TLS。
但是System.Net.Mail.SmtpClient
不支持较新的TLS协议因此需要使用另一个
MailKit是一个开源的基于MimeKit的跨平台邮件收发类库,支持IMAP、POP3、SMTP。其中SmtpClient也支持TLS协议.
可以很好的支持 .NET Core以及 .NET Framework框架的邮件发送
using MailKit.Net.Smtp;
using MailKit;
using MimeKit;
接口代码如下:
[WebMethod(Description = "下载到邮箱")]
public string SendQQMail(string key, string strto, string strfile, string strfileName)//key是为了安全校验,strto是接收者的邮箱,strfile为附件的路径,strfileName附件名称
{
string systemKey = "37a3ab25-cd1a-481b-a675-87161b20c19e";
if (key == systemKey)
{
try
{
var message = new MimeMessage();
message.From.Add(new MailboxAddress("test", "xxxxxx@qq.com"));//发送人的名称以及邮箱
message.To.Add(new MailboxAddress("test", strto));//接收人的名称以及邮箱
message.Subject = "发送测试";//邮件主题
//html or plain
var bodyBuilder = new BodyBuilder();
bodyBuilder.HtmlBody = "<b>发送测试</b>";
bodyBuilder.TextBody = "发送测试";
message.Body = bodyBuilder.ToMessageBody();
Multipart multipart = new Multipart("mixed");
//附件
string absolutePath = strfile;
MimePart attachment = new MimePart()
{
//读取文件,只能用绝对路径
ContentObject = new ContentObject(File.OpenRead(absolutePath), ContentEncoding.Default),
ContentDisposition = new MimeKit.ContentDisposition(MimeKit.ContentDisposition.Attachment),
ContentTransferEncoding = ContentEncoding.Base64,
//文件名字
FileName = strfileName + ".xlsx"
};
multipart.Add(attachment);
message.Body = multipart;
using (var client = new MailKit.Net.Smtp.SmtpClient())
{
client.ServerCertificateValidationCallback = (s, c, h, e) => true;
//smtp服务器,端口,是否开启ssl
client.Connect("smtp.qq.com", 465, true);
client.Authenticate("xxxxx@qq.com", password);//发送者邮箱以及授权码
client.Send(message);
client.Disconnect(true);
}
return "发送成功";
}
catch (Exception ex)
{
System.IO.StreamWriter file = new System.IO.StreamWriter("d:\\log.txt");
file.WriteLine(ex.StackTrace);
file.Close();
return ex.Message;
}
}
else
{
return "";
}
}
要使用需要安装打开vs2019 Nuget 搜索一下两个包 两个m开头的