EDM(电子邮件营销)已经诞生了很多年,在国内随着很多IM工具的普及,曾经有人断言:邮件将在不久的将来消失,然而从目前来看并没有消失。实际上邮件在很多特定场景是有她的重要用途的。

在亚马孙上购物完成之后,亚马逊会根据我的历史购物记录配合自身的推荐系统,向我推荐可能感兴趣的书籍,这样可以有效地促成转化。网站注册,忘记密码等服务也有很多用邮件来完成。

最近我有一项需求,我想利用邮件群发来做推广,就是流传已久的EDM营销。原本我以为这事其实没什么难度,找下第三方邮件发送,熟悉下sdk群发邮件就行了,任何事情如果自己没做过,其实是不了解细节的,邮件群发存在很多细节需要注意,记录下这次邮件群发的思考。

首先挑选邮件群发第三方服务,我没有看很多第三方服务,就看了两家,一个是搜狐,另外一个是阿里云。比对下来阿里云的价格更加便宜,所以我就选择了阿里云的邮件推送服务。阿里云的价格如下:


点击直达

每天200封免费,超出部分才计费,初始值每天2000封,这个数量是随着发送质量动态调整的,这个需要特别注意,要发送经过验证可达的真实邮箱,否则会被降低每日发送数量,严重的可能被封。被封之后,可以申请解封,但是每个账号只有两次机会,这个特别需要注意。我就因为没有仔细去了解这个规则,被封了一次,如何确保邮箱质量,我在下文将会提到。

想要发送邮件首先你得有个域名。第一步就是到阿里万网申请一个域名,申请域名的步骤这里就不做概述了。使用阿里云的邮件推送服务,需要申请开通这个功能,到申请开通入口,点击申请开通按钮。

进入到阿里云管理控制台—>邮件推送—>发信域名页面,点击右上角的新建域名:

点击新建域名之后,在输入框中输入自己的发送域名,这里不建议使用企业邮箱作为域名,这也是阿里云的建议,原因其实很简单,如果大量发送营销推广邮件,会导致邮箱使用异常。所以建议使用二级域名作为发送域名,例如:mail.taobao.com。

发信域名添加完成之后,主界面就会出现一条数据。我们需要针对这个发信域名做配置:

点击配置链接,将会出现一个配置参数页面,参数页面看上去很复杂,有人可能看到就想放弃了。其实很简单。配置页面总共有4个参数,其中3个参数是必须的。我们只需要把这3项参数复制到万网的解析记录中去就可以了。我们来看下配置参数:(配置参数说明图)

其中1 ,2,3参数是必须的,第四个可以忽略。接下来我们要做的就是将上图中配置界面的参数复制到域名解析列表中。打开阿里万网的域名列表(阿里云管理控制台—>域名与网站(万网)—>域名),如图:

点击解析链接,进入到解析设置页面,进入页面之后,点击右上角的添加记录按钮,在弹出框中进行设置,弹出框界面如下:

简单说下这几个参数,记录类型:记录类型就是将上文中提到过的(配置参数说明图)中的4种类型,全部添加进来。主机记录也是参照上文(配置参数说明图)的主机记录,将图中的主机记录复制过来即可。解析线路保持默认即可。记录值:记录值就是在(配置参数说明图)中有一个”记录值”的一列,只需要把这一列的值复制过来就行了,有木有很简单。

总共需要添加4次记录就完成了解析设置,添加完成之后,界面是这样的:

域名解析完成之后,下一步就是发信地址(阿里云管理控制台–>邮件推送–>发信地址)的配置了:

新建发信地址如下:

发信域名选项选择已经配置完成的发信域名即可,账号输入,例如我的账号是这样的:service@mail.taobao.com。回信地址如果没有就不必填写,我没用过回信地址,所以我在这里是没有填写的。发信类型选择批量邮件。

发信地址设置完成,列表页面就会出现刚才添加的记录了:

这里需要注意一点,上图中有一个选项:设置SMTP密码。如果你想用smtp协议来发送邮件,那么就需要设置smtp密码。发送邮件有两种方式,一种是smtp,另一种是使用阿里云自身的sdk,使用sdk用的是阿里云提供的密钥。如果选择smtp方式发送,那么就设置下smtp密码。

至此,所有的设置步骤已经完成了,接下来就是发送的过程了。我是使用了smtp方式作为邮件发送的。主要考虑是以下几点。用阿里云的sdk发送,需要用到accessSecret,accessSecret拥有账号的所有权限,我的代码又是托管到git服务器上的,所以为了安全起见用了smtp方式。
原文地址
阿里云本身也提供了子账号的accessSecret权限,建立子账号后,可以规定子账号的权限,比如可以建立一个只能发送邮件的子账号accessSecret。这样就可以保证安全性。

smtp发送的代码非常简单,主要用到了第三方的类库,代码如下:

js
public class MailService {private static MailService mailService;public static MailService getInstance(String username, String pwd, String smtp,String port) {if (mailService== null) {mailService= new MailService(username, pwd, smtp,port);return mailService;} else {return mailService;}}private final transient Properties props = System.getProperties();/**
/     * 邮件服务器登录验证/
/     */
private transient MailAuthenticator authenticator;/**
/     * 邮箱session/
/     */
private transient Session session;private MailService(String username, String pwd, String smtp,String port) {authenticator = new MailAuthenticator(username, pwd);props.put("mail.smtp.auth", "true");props.put("mail.smtp.host", smtp);props.put("mail.smtp.port",port);session = Session.getInstance(props, authenticator);}//**/
/     * 发送邮件/
/     */
/     */*@param*/recipient 收件人邮箱地址/
/     */*@param*/subject   邮件主题/
/     */*@param*/content   邮件内容/
/     */*@throws*/AddressException/
/     */*@throws*/MessagingException/
/     *//
public void send(String recipient, String subject, String content)throws MessagingException {final MimeMessage message = new MimeMessage(session);message.setFrom(new InternetAddress(authenticator.getUsername()));message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(recipient));message.setSubject(subject);message.setContent(content, "text/html;charset=utf-8");Transport.send(message);}//**/
/     * 群发邮件/
/     */
/     */*@param*/recipients 收件人们/
/     */*@param*/subject    主题/
/     */*@param*/content    内容/
/     */*@throws*/AddressException/
/     */*@throws*/MessagingException/
/     *//
public void send(List<String> recipients, String subject, String content) throws MessagingException {final MimeMessage message = new MimeMessage(session);message.setFrom(new InternetAddress(authenticator.getUsername()));final int num = recipients.size();InternetAddress[] addresses = new InternetAddress[num];for (int i = 0; i < num; i++) {addresses[i] = new InternetAddress(recipients.get(i));}message.setRecipients(MimeMessage.RecipientType.TO, addresses);message.setSubject(subject);message.setContent(content, "text/html;charset=utf-8");Transport.send(message);}
}

以上需要引用java.mail类库:

<dependency><groupId>com.sun.mail</groupId><artifactId>javax.mail</artifactId><version>1.5.6</version>
</dependency>

阿里云的配置信息如下:
mail.aliyunUsername=service@mail.taobao.com
mail.aliyunAuthorizationCode=你的smtp密码
mail.aliyunSmtp=smtpdm.aliyun.com
mail.aliyunPort=25

以上就是使用阿里云发送邮件的全过程了,总体上还是比较简单的。下面再来说说需要注意的地方。

阿里云每日的发送量是有限的,这个根据你的邮箱发送质量决定,初始值是2000,之后会根据你的邮箱质量动态调整。起初我发送了很多没有验证过的邮箱导致我被封,所以在大量发送邮件之前,请确保你的邮箱是真实可达的。

邮件群发到这里就介绍完了,主要介绍了阿里云的配置,还有遇到的问题和需要注意的地方,码字不易,如果对你有帮助,欢迎点赞。详细可以查看阿里云邮件推送文档。
原文地址

使用阿里云邮件推送服务群发邮件相关推荐

  1. 解决.NET Core中MailKit无法使用阿里云邮件推送服务的问题

    在博问中(.net core怎么实现邮件发送)知道了MailKit无法使用阿里云邮件推送服务发送邮件的问题,自已实测也遇到同样的问题,而用自己搭建的邮件服务器没这个问题. 于是,向阿里云提交了工单.. ...

  2. 使用阿里云邮件推送服务架设自己邮件验证与推送体系

    提示:阅读本文需提前了解的相关知识 1.电子邮件协议(http://baike.baidu.com/view/2367542.htm) 2.阿里云邮件推送(https://www.aliyun.com ...

  3. wordpress使用阿里云邮件推送服务实现发送邮件

    之前用腾迅云时,配置了wordpress是可以使用邮件服务的,然而到了阿里云,却无法使用了,有人说是因为阿里云关了25端口,但腾迅好像也关了. 百度看看有没有其他方法,最终让我找到个方法,可惜不是很完 ...

  4. PHPCMS 邮件发送 - 使用阿里云邮件推送服务的详细设置

    自从阿里云和腾讯云相继默认封闭了云主机的25端口(可申请解封) 我就使用了阿里云的邮件推送服务,感觉很是好用.把我使用PHPCMS做的网站的邮件发送也设置成了使用了阿里云的邮件推送. 我使用的邮箱是阿 ...

  5. 阿里云邮件推送服务配置

    前言 距博客评论.留言功能上线以来,虽然访问人数不多. 但是前段时间发现有人评论了文章,并留下了疑问.但是已经过去多时,所以打算完善评论.留言功能,并添加邮件推送以便第一时间知晓. 准备工作 本文采用 ...

  6. 阿里云-邮件推送 java 代码 ,测试邮件推送服务,阿里云邮件推送,java

    阿里云-邮件推送Java 测试代码 1.阿里云-邮件推送 配置 购买域名 配置域名 2.创建 Access Key 2.1登录 Access Key 管理控制台. 2.2单击页面右上角按钮 创建 Ac ...

  7. java项目——发邮件之阿里云邮箱推送服务(一)

    最近做项目的时候用到了阿里云的邮箱推送.首先站在我自己的理解的角度,为什么要用阿里云邮箱推送服务? 首先从万网说起. 中国万网是中国最大的互联网基础服务提供商之一,服务范围涵盖基础的域名服务.主机服务 ...

  8. 阿里云-邮件推送 配置 购买域名 配置域名

    阿里云-邮件推送 配置 购买域名 配置域名 1.邮件推送是什么: 2.为什么要用它 3.如何使用? 3.1 第一步:创建发信域名 第二步. 创建发信地址 第三步. 再创建一个模板,这个需要审核. 最后 ...

  9. 阿里云邮件推送,邮件模板加EmailCamel退订链接,加速模板通过审核!

    1. 什么是邮件退订链接? 在给客户发邮件或者群发邮件的时候,在邮件内容的底部加退订链接.客户如果以后不想接收您的邮件,可以退订.退订后,您就不要再给客户发邮件了.使用EmailCamel退订链接,可 ...

  10. java阿里云邮件推送接口API使用

    最近公司在使用阿里云的邮箱验证功能,网上信息乱七八糟,弄了一下午才试验成功,记录一下 你需要有的: [发信地址,域名,AccessKey ID,AccessKey Secret] 1.阿里云-邮件推送 ...

最新文章

  1. 使用nGraph的Intel®Xeon®上的高性能TensorFlow
  2. php 词法分析,【PHP7源码学习】2019-03-20 PHP词法分析
  3. Collections.sort()自定义排序方式
  4. Linux-Vim使用技巧
  5. 如何处理错误消息Unable to install breakpoint due to missing line number attributes
  6. 【遥感数字图像处理】基础知识:第二章 遥感知识回顾、遥感数字图像处理基础知识
  7. Linux服务器,服务管理--systemctl命令详解,设置开机自启动
  8. “年薪 45 万美元的 Netflix 开发工作,我不要了”
  9. Architecture(5)电商APP组件化探索
  10. 基于模板的通用代码生成器LKGenerator(二)-使用时的关键步骤,注意事项及实例
  11. 拓端tecdat|R语言机器学习实战之多项式回归
  12. 用char*作为map的key
  13. 六月福师计算机应用基础在线作业,19春福师《计算机应用基础》在线作业一答案满分...
  14. 计算机快速看图教程,CAD快速看图教程:CAD图纸测量方法集锦
  15. 南佛罗里达大学计算机科学硕士,去南佛罗里达大学读硕士好吗
  16. http库三剑客:httpx
  17. 玩转 IDEA 系列教程——强烈推荐官方中文(汉化)插件!
  18. 2020年某计算机菜鸡的中九保研之旅(武大、华科、北理、西交、中山)
  19. 【pytest】内置 fixtures 之 tmpdir:创建临时文件
  20. 【客家风情】世界遗产·福建土楼·永定篇

热门文章

  1. MIMOl信道估计基本原理
  2. 视频格式转换软件哪个快又好用?视频转换器苹果mac版推荐
  3. 好消息!!超任模拟器被我移植到MOTO E680i上了!!
  4. 使用instsrv和srvany注册windows系统服务
  5. instsrv.exe和srvany.exe将.exe文件注册为windows服务
  6. matlab中gui选择一个文件,matlabgui中定义函数
  7. C#winform之自定义按钮形状(初级版)
  8. EXCEL中的数据分析—描述统计
  9. 豆瓣电影TOP250全套下载
  10. C# Hprose轻量级、跨语言、跨平台的面向对象的高性能远程动态通讯中间件