阿里云企业邮件使用安全及DirectMail开发

随着互联网发展,一个大企业也往往存在几个不同地理位置的企业分部,不同分部之间少不了信息的交流,而邮箱是企业之间交流的必备工具。

阿里云邮箱有很多功能,譬如设置 新到邮件提醒,桌面弹出提醒,异地登录提醒;设置黑名单管理,白名单管理;还可以创建任务,指派给邮箱中的联系人。今天告诉大家怎样通过阿里域名申请免费阿里云企业邮箱及阿里云邮箱的使用。

阿里云企业邮箱及阿里云邮箱的使用

1. 进入阿里云官网,登录

  https://www.aliyun.com/?utm_medium=text&utm_source=bdbrand&utm_campaign=bdbrand&utm_content=se_32492



阿里云企业邮件使用安全及DirectMail开发_第1张图片


2. 登录之后,在首页选择  免费版 企业邮箱


阿里云企业邮件使用安全及DirectMail开发_第2张图片


3.选择 立即抢购

  阿里云企业邮件使用安全及DirectMail开发_第3张图片


4. 选择 邮箱绑定域名

      阿里云企业邮件使用安全及DirectMail开发_第4张图片

5. 选择 绑定的域名

阿里云企业邮件使用安全及DirectMail开发_第5张图片

6.选择 下一步,确认订单


阿里云企业邮件使用安全及DirectMail开发_第6张图片


7.支付成功之后,就可以进入 控制台进行管理

  阿里云企业邮件使用安全及DirectMail开发_第7张图片



阿里云企业邮件使用安全及DirectMail开发_第8张图片


     8.设置 postmaster账户的密码,进入 mail.域名.com 分配其他账号,分配完成之后就可以开始使用 阿里云 邮箱了。

     9. 进入 阿里云邮箱,在可以修改设置

      阿里云企业邮件使用安全及DirectMail开发_第9张图片

10. 在设置中有很多功能

     阿里云企业邮件使用安全及DirectMail开发_第10张图片

  我常用的设置有 签名设置,提醒设置(新到邮件提醒,桌面弹出提醒).


11.阿里云邮箱中的 任务 功能我也使用的比较多

   阿里云企业邮件使用安全及DirectMail开发_第11张图片

     


        可以 按时间进行创建任务,可以创建给自己,也可以创建给通讯录中的其他人。


    阿里云企业邮箱使用实惠方便,但是使用过程中还是有一些问题。由于我没有设置  收件人发送已读回执,所以我每次查看 已发送邮件的读信状态。

    但是已经被收件人阅读的信件在 阿里云邮箱中看到的状态还是未读状态,一直都没有更新。

   阿里云企业邮件使用安全及DirectMail开发_第12张图片


  使用 outlook邮件 客户端已经阅读过的邮件,登录上 阿里云邮箱 还是会出现在 收件箱中的 未读邮件中。

下面我在分享下阿里云邮箱的邮件推送功能DirectMail的开发。

阿里云邮件推送服务开发

我们会发现,越来越多的互联网应用和企业级应用,开始使用邮件验证码验证替代邮件链接验证。因为邮件链接验证,在开发和测试功底不是特别强的情况下会产生严重的漏洞,造成安全问题,而邮件验证码则相对来说安全多了,因此我们就很有必要来讨论下阿里云邮件的推送服务了。也只有一个优秀的互联网应用加上完美的邮件服务,才能带来更加优质的用户体验。

随着互联网的发展,伴随着QQ等邮件服务商的走红,传统的国外那一套邮件规则和秩序已经发生了改变,有时候就算你有很多IP,做了反向解析,在Spamhaus白名单,又或者虚拟了不同的helo域,QQ邮箱还是照拦不误,最终还是得单独花钱向国内外各大ESP购买独立通道
在这种情况下,自建邮局系统或者邮件SMTP服务,就显得得不偿失了,所以一方面各大企业邮箱服务越做越好,得到企业的认可,另一方面,国内外如SendGrid,SendCloud等第三方邮件PUSH服务商也逐渐做大,他们用更专业的手段,去解决通道、白名单、信誉度等各种邮件服务问题,而客户只需要通过SMTP协议或者封装的API接口,就可以非常便捷的给用户发送邮件。


就我所知,目前国内做的最好的当属搜狐的SendCloud,但是SendCloud发展了这么多年,也越来越复杂和专业,我认为更适合有大型EDM需求的应用使用,作为中小企业和创业者以及站长,首推依然是阿里云的邮件推送服务,一如既往秉持阿里云的特点:使用傻瓜,上手快速,文档俱全,但漏洞和问题多多,不过作为AWS的追赶者,能在短时间内快速实现这些应用级功能,也算是值得鼓励的。因此下面也基于阿里云邮件推送服务,来实现一个自己的邮件验证与推送体系。

首先在阿里云邮件推送控制台添加域名,然后在自己的dns服务器中添加如下的解析(根据控制台中的“配置”):

  1. 一个主机名为aliyundm的TXT记录,用于验证域名所有权
  2. 一个主机名为空、值为v=spf1 include:spf1.dm.aliyun.com -all的TXT记录,用于防止被当作垃圾邮件
  3. 一个MX记录
在mac上可以通过nslookup -query=TXT 域名与nslookup -query=MX 域名命令查看DNS设置是否生效。

接着在阿里云控制台验证一下域名,验证成功之后,添加一下发信地址(发件地址),并设置一下SMTP密码。

然后通过下面的代码使用阿里云邮件推送服务的SMTP就可以发送邮件了。
var mailMsg = new MailMessage();
mailMsg.From = new MailAddress("控制台创建的发信地址", "显示名称");
mailMsg.To.Add("收件人邮箱");
mailMsg.Subject = "Hello aliyun dm";
mailMsg.Body = "Send from aliyun dm";
mailMsg.IsBodyHtml = true;
var smtp = new SmtpClient("smtp.dm.aliyun.com", 25);
smtp.Credentials = new NetworkCredential("控制台创建的发信地址", "SMTP密码");
smtp.Send(mailMsg);

使用MailKit通过阿里云邮件推送服务(directmail)发送邮件的代码:

private static async Task SendEmailAsync(
    string fromName, string fromEmail,
    string toName, string toEmail,
    string title, string body)
{
    var mailMessage = new MimeMessage();
    mailMessage.From.Add(new MailboxAddress(fromName, fromEmail));
    mailMessage.To.Add(new MailboxAddress(toName, toEmail));
    mailMessage.Subject = title;
    mailMessage.Body = new TextPart("plain") { Text = body };
    using (var smtpClient = new SmtpClient())
    {
        await smtpClient.ConnectAsync("smtp.dm.aliyun.com", 25, SecureSocketOptions.None).ConfigureAwait(false);
        smtpClient.Authenticate(new NetworkCredential("username", "password"));
        await smtpClient.SendAsync(mailMessage).ConfigureAwait(false);
        await smtpClient.DisconnectAsync(true).ConfigureAwait(false);
    }
}

开发过程中遇到的问题和解决方案

阿里云邮件推送服务会返回错误"503 Bad sequence of commands"问题

最初提交了工单等待了半天,收到了返回说我的网络有问题,或者我的用户名和密码不对。后来在提供了TCP抓包数据后,阿里云技术专员发现了问题所在:在认证通过后,MailKit发送了EHLO命令,然后才发送MAIL FROM命令,服务器在收到EHLO时会重置客户端的认证状态,所以后续的命令过来时,服务器认为客户端没有认证,于是报错“503 Bad sequence of commands”。

知道了问题的原因后,首先想到的解决方法是不让MailKit在发送MAIL FROM命令之前发送EHLO命令。

于是在github上签出MailKit的源代码,在 MailKit\Net\Smtp\SmtpClient.cs 中找到了下面的代码:
if (host != "smtp.strato.de" && host != "smtp.sina.com")
    Ehlo (cancellationToken);
并且发现了对应这个问题的issue:EHLO after AUTH causes send failure with 5.7.0 even though authentication succeeded #162


原来这是已知问题,MailKit暂时采用了临时解决方法,于是我们也依葫芦画瓢,加上了阿里云邮件推送服务的SMTP服务器:
if (host != "smtp.strato.de" && host != "smtp.sina.com"
    && !host.Equals("smtp.dm.aliyun.com", StringComparison.OrdinalIgnoreCase))
    Ehlo (cancellationToken);
目前最新的MailKit 1.4.1 已修复这个问题。

你可能感兴趣的:(阿里云企业邮件使用安全及DirectMail开发)