EKsumic's Blog

let today = new Beginning();

Click the left button to use the catalog.

OR

.NET Core 如何发送电子邮件

.net core发送电子邮件有两种选择:SendGrid和MailKit

 

先说一个题外话,作为初学者,得知道一件事,.NET Framework是自带SmtpClinet用来发邮件的,并且在.NET Core也能用,但是现在SmtpClient已经被微软标记为弃用。

SmtpClient is abandoned

 

个人建议使用MailKit,

微软钦点的MailKit,那么既然钦点了,就说明这个东西算是比较完整的解决方案之一。

 

常见案例(使用代理):

var message = new MimeMessage();

string  Email = "接收者邮箱";

message.From.Add(new MailboxAddress(发送者));

message.To.Add(new MailboxAddress(Email));

message.Subject = "标题";

var builder = new BodyBuilder();

builder.HtmlBody = "";  //html

builder.TextBody = "";  //文本

message.Body = builder.ToMessageBody();

var client = new SmtpClient();

client.Connect(_settings.Value.EmailServer, _settings.Value.EmailPort, true);     //连接服务

client.AuthenticationMechanisms.Remove("XOAUTH2");

client.Authenticate(_settings.Value.EmailAddress, _settings.Value.EmailPassword); //验证账号密码

client.Send(message);

client.Disconnect(true);

 

基本案例(不使用代理):

var message = new MimeMessage ();

message.From.Add (new MailboxAddress ("Joey", "[email protected]"));

message.To.Add (new MailboxAddress ("Alice", "[email protected]"));

message.Subject = "How you doin?";



message.Body = new TextPart ("plain") {

    Text = @"Hey Alice,



What are you up to this weekend? Monica is throwing one of her parties on

Saturday and I was hoping you could make it.



Will you be my +1?



-- Joey

"

};

 

一般的邮件系统很多都是在内部,没有经过CDN的解析,这样通过查看原始的文件头部,可以看到真实的IP。

 

 

以CloudFlare为例:

Cloudflare about email server ip protection

Cloudflare默认是不代理邮件服务流量的,邮件服务器IP地址不受保护,所以强烈建议不要把Web服务和邮件服务放在同一台服务器上。

 

 

但是如果使用本地的SMTP服务器(比如本机IIS的SMTP服务器)发送邮件,会被许多大型网站的邮箱当做垃圾邮件来处理,原因是本地SMTP服务器的地址并不为人所知,发送的邮件理所当然会被当做来历不明的邮件,所以我们要借助一些大型知名网站的SMTP服务器来为我们发送邮件。

 

 

那么现在剩下一个问题,

 

Q:由本地服务器发起的smtp服务请求会不会暴露IP地址给邮件服务器提供商?

A:答案是可能会暴露。(80%可能性)

 

如果你不信任国内的邮箱代理,非常敏感隐私问题,那么请不要用QQ邮箱、163邮箱之类的,另外国外发过来的邮件容易被扣、被当垃圾邮件处理。

 

个人建议,基于隐私和服务器安全问题,即使是使用代理,最好还是使用微软outlook或谷歌gmail服务。

 

 

补充:

outlook邮箱,不需要手机号就能注册,注册流程非常简单。(建议首选)

gmail需要手机号注册,但是大陆手机号目前好像有了限制。(一号一邮箱)

qq邮箱,需要手机号注册,新注册的号是不开放POP3/SMTP等服务的,个人建议先充个vip,使用[email protected]作为邮箱地址,这样就不容易被当成垃圾邮件了。

网易163邮箱,需要手机号注册,但有一定概率会将国外发过来的邮件放到垃圾箱。

 

关于outlook邮箱的设置:

outlook pop3 smtp options setting

 

 

 

 

参考文档:

[1] asp.net core 以编程方式发送电子邮件

[2] .NET Core 使用MailKit发送电子邮件

[3] asp.net core 使用MailKit 发送邮件

[4] MailKit – 官方参考文档

[5] CloudFlare防护下的破绽:寻找真实IP的几条途径

This article was last edited at 2020-06-16 20:58:20

* *