EDM(電子郵件營(yíng)銷)已經(jīng)誕生了很多年合敦,在國(guó)內(nèi)隨著很多IM工具的普及退疫,曾經(jīng)有人斷言:郵件將在不久的將來(lái)消失融柬,然而從目前來(lái)看并沒(méi)有消失万伤。實(shí)際上郵件在很多特定場(chǎng)景是有她的重要用途的。
在亞馬孫上購(gòu)物完成之后月劈,亞馬遜會(huì)根據(jù)我的歷史購(gòu)物記錄配合自身的推薦系統(tǒng)度迂,向我推薦可能感興趣的書籍,這樣可以有效地促成轉(zhuǎn)化猜揪。網(wǎng)站注冊(cè)惭墓,忘記密碼等服務(wù)也有很多用郵件來(lái)完成。
最近我有一項(xiàng)需求湿右,我想利用郵件群發(fā)來(lái)做推廣诅妹,就是流傳已久的EDM營(yíng)銷。原本我以為這事其實(shí)沒(méi)什么難度毅人,找下第三方郵件發(fā)送,熟悉下sdk群發(fā)郵件就行了尖殃,任何事情如果自己沒(méi)做過(guò)丈莺,其實(shí)是不了解細(xì)節(jié)的,郵件群發(fā)存在很多細(xì)節(jié)需要注意送丰,記錄下這次郵件群發(fā)的思考缔俄。
首先挑選郵件群發(fā)第三方服務(wù),我沒(méi)有看很多第三方服務(wù),就看了兩家俐载,一個(gè)是搜狐蟹略,另外一個(gè)是阿里云。比對(duì)下來(lái)阿里云的價(jià)格更加便宜遏佣,所以我就選擇了阿里云的郵件推送服務(wù)挖炬。阿里云的價(jià)格如下:
每天200封免費(fèi),超出部分才計(jì)費(fèi)状婶,初始值每天2000封意敛,這個(gè)數(shù)量是隨著發(fā)送質(zhì)量動(dòng)態(tài)調(diào)整的,這個(gè)需要特別注意膛虫,要發(fā)送經(jīng)過(guò)驗(yàn)證可達(dá)的真實(shí)郵箱草姻,否則會(huì)被降低每日發(fā)送數(shù)量,嚴(yán)重的可能被封稍刀。被封之后撩独,可以申請(qǐng)解封,但是每個(gè)賬號(hào)只有兩次機(jī)會(huì)账月,這個(gè)特別需要注意跌榔。我就因?yàn)闆](méi)有仔細(xì)去了解這個(gè)規(guī)則,被封了一次捶障,如何確保郵箱質(zhì)量僧须,我在下文將會(huì)提到。
想要發(fā)送郵件首先你得有個(gè)域名项炼。第一步就是到阿里萬(wàn)網(wǎng)申請(qǐng)一個(gè)域名担平,申請(qǐng)域名的步驟這里就不做概述了。使用阿里云的郵件推送服務(wù)锭部,需要申請(qǐng)開(kāi)通這個(gè)功能暂论,到申請(qǐng)開(kāi)通入口,點(diǎn)擊申請(qǐng)開(kāi)通按鈕拌禾。
進(jìn)入到阿里云管理控制臺(tái)—>郵件推送—>發(fā)信域名頁(yè)面取胎,點(diǎn)擊右上角的新建域名:
點(diǎn)擊新建域名之后,在輸入框中輸入自己的發(fā)送域名湃窍,這里不建議使用企業(yè)郵箱作為域名闻蛀,這也是阿里云的建議,原因其實(shí)很簡(jiǎn)單您市,如果大量發(fā)送營(yíng)銷推廣郵件觉痛,會(huì)導(dǎo)致郵箱使用異常。所以建議使用二級(jí)域名作為發(fā)送域名茵休,例如:mail.taobao.com薪棒。
發(fā)信域名添加完成之后手蝎,主界面就會(huì)出現(xiàn)一條數(shù)據(jù)。我們需要針對(duì)這個(gè)發(fā)信域名做配置:
點(diǎn)擊配置鏈接俐芯,將會(huì)出現(xiàn)一個(gè)配置參數(shù)頁(yè)面棵介,參數(shù)頁(yè)面看上去很復(fù)雜,有人可能看到就想放棄了吧史。其實(shí)很簡(jiǎn)單邮辽。配置頁(yè)面總共有4個(gè)參數(shù),其中3個(gè)參數(shù)是必須的扣蜻。我們只需要把這3項(xiàng)參數(shù)復(fù)制到萬(wàn)網(wǎng)的解析記錄中去就可以了逆巍。我們來(lái)看下配置參數(shù):(配置參數(shù)說(shuō)明圖)
其中1 ,2莽使,3參數(shù)是必須的锐极,第四個(gè)可以忽略。接下來(lái)我們要做的就是將上圖中配置界面的參數(shù)復(fù)制到域名解析列表中芳肌。打開(kāi)阿里萬(wàn)網(wǎng)的域名列表(阿里云管理控制臺(tái)—>域名與網(wǎng)站(萬(wàn)網(wǎng))—>域名)灵再,如圖:
點(diǎn)擊解析鏈接,進(jìn)入到解析設(shè)置頁(yè)面亿笤,進(jìn)入頁(yè)面之后翎迁,點(diǎn)擊右上角的添加記錄按鈕,在彈出框中進(jìn)行設(shè)置净薛,彈出框界面如下:
簡(jiǎn)單說(shuō)下這幾個(gè)參數(shù)汪榔,記錄類型:記錄類型就是將上文中提到過(guò)的(配置參數(shù)說(shuō)明圖)中的4種類型,全部添加進(jìn)來(lái)肃拜。主機(jī)記錄也是參照上文(配置參數(shù)說(shuō)明圖)的主機(jī)記錄痴腌,將圖中的主機(jī)記錄復(fù)制過(guò)來(lái)即可。解析線路保持默認(rèn)即可燃领。記錄值:記錄值就是在(配置參數(shù)說(shuō)明圖)中有一個(gè)”記錄值”的一列士聪,只需要把這一列的值復(fù)制過(guò)來(lái)就行了,有木有很簡(jiǎn)單猛蔽。
總共需要添加4次記錄就完成了解析設(shè)置剥悟,添加完成之后,界面是這樣的:
域名解析完成之后曼库,下一步就是發(fā)信地址(阿里云管理控制臺(tái)-->郵件推送-->發(fā)信地址)的配置了:
新建發(fā)信地址如下:
發(fā)信域名選項(xiàng)選擇已經(jīng)配置完成的發(fā)信域名即可区岗,賬號(hào)輸入,例如我的賬號(hào)是這樣的:service@mail.taobao.com凉泄□镂荆回信地址如果沒(méi)有就不必填寫,我沒(méi)用過(guò)回信地址后众,所以我在這里是沒(méi)有填寫的胀糜。發(fā)信類型選擇批量郵件。
發(fā)信地址設(shè)置完成蒂誉,列表頁(yè)面就會(huì)出現(xiàn)剛才添加的記錄了:
這里需要注意一點(diǎn)教藻,上圖中有一個(gè)選項(xiàng):設(shè)置SMTP密碼。如果你想用smtp協(xié)議來(lái)發(fā)送郵件右锨,那么就需要設(shè)置smtp密碼括堤。發(fā)送郵件有兩種方式,一種是smtp绍移,另一種是使用阿里云自身的sdk悄窃,使用sdk用的是阿里云提供的密鑰。如果選擇smtp方式發(fā)送蹂窖,那么就設(shè)置下smtp密碼轧抗。
至此,所有的設(shè)置步驟已經(jīng)完成了瞬测,接下來(lái)就是發(fā)送的過(guò)程了横媚。我是使用了smtp方式作為郵件發(fā)送的。主要考慮是以下幾點(diǎn)月趟。用阿里云的sdk發(fā)送灯蝴,需要用到accessSecret,accessSecret擁有賬號(hào)的所有權(quán)限孝宗,我的代碼又是托管到git服務(wù)器上的穷躁,所以為了安全起見(jiàn)用了smtp方式。
阿里云本身也提供了子賬號(hào)的accessSecret權(quán)限因妇,建立子賬號(hào)后问潭,可以規(guī)定子賬號(hào)的權(quán)限,比如可以建立一個(gè)只能發(fā)送郵件的子賬號(hào)accessSecret沙峻。這樣就可以保證安全性睦授。
smtp發(fā)送的代碼非常簡(jiǎn)單,主要用到了第三方的類庫(kù)摔寨,代碼如下:
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();
/**
/ * 郵件服務(wù)器登錄驗(yàn)證/
/ */
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);
}
//**/
/ * 發(fā)送郵件/
/ */
/ */*@param*/recipient 收件人郵箱地址/
/ */*@param*/subject 郵件主題/
/ */*@param*/content 郵件內(nèi)容/
/ */*@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);
}
//**/
/ * 群發(fā)郵件/
/ */
/ */*@param*/recipients 收件人們/
/ */*@param*/subject 主題/
/ */*@param*/content 內(nèi)容/
/ */*@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類庫(kù):
<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
以上就是使用阿里云發(fā)送郵件的全過(guò)程了去枷,總體上還是比較簡(jiǎn)單的。下面再來(lái)說(shuō)說(shuō)需要注意的地方是复。
阿里云每日的發(fā)送量是有限的删顶,這個(gè)根據(jù)你的郵箱發(fā)送質(zhì)量決定,初始值是2000淑廊,之后會(huì)根據(jù)你的郵箱質(zhì)量動(dòng)態(tài)調(diào)整逗余。起初我發(fā)送了很多沒(méi)有驗(yàn)證過(guò)的郵箱導(dǎo)致我被封,所以在大量發(fā)送郵件之前季惩,請(qǐng)確保你的郵箱是真實(shí)可達(dá)的录粱。
那么如何驗(yàn)證郵箱的真實(shí)有效性呢腻格?這還真是個(gè)問(wèn)題,思路可以參考下阮一峰的這篇文章:如何驗(yàn)證 Email 地址啥繁。我在看完此篇文章之后菜职,覺(jué)得應(yīng)該沒(méi)什么問(wèn)題,覺(jué)得有效性是個(gè)可以用代碼解決的問(wèn)題旗闽,我嘗試了之前阿里云后臺(tái)發(fā)送失敗的一些郵箱酬核,按照博客中的協(xié)議嘗試了下,沒(méi)想到返回的是200适室。
就是說(shuō)用協(xié)議去驗(yàn)證郵箱地址的時(shí)候嫡意,返回了200,但是郵箱地址其實(shí)是不存在的捣辆,這個(gè)我用qq郵箱發(fā)送過(guò)蔬螟,確實(shí)是不存在的。然后我嘗試使用了第三方的服務(wù)罪帖,例如Verify Email促煮,這個(gè)網(wǎng)站是按照調(diào)用次數(shù)收費(fèi)的,收費(fèi)價(jià)格如下:
看到了這個(gè)價(jià)格整袁,屌絲的我已經(jīng)承受不起了菠齿,因?yàn)槲业泥]箱數(shù)量有幾十萬(wàn),所以費(fèi)用可能會(huì)非常高坐昙,但是郵箱的轉(zhuǎn)化率實(shí)際上是比較低的绳匀,所以權(quán)衡成本,這個(gè)服務(wù)我是用不了的炸客。此外我還發(fā)現(xiàn)有些不存在的qq郵箱疾棵,這個(gè)網(wǎng)站的驗(yàn)證結(jié)果是成功的。這說(shuō)明這個(gè)網(wǎng)站的驗(yàn)證服務(wù)其實(shí)是有失敗率的痹仙。
我又看了利劍郵箱驗(yàn)證和Fast Email Verifier是尔,這兩款軟件的測(cè)試結(jié)果都不理想。最后我在網(wǎng)上找到了一款email驗(yàn)證开仰∧饷叮總體說(shuō)來(lái)這款軟件是最讓我滿意的一款,擁有非常高的準(zhǔn)確率众弓,當(dāng)然是收費(fèi)的恩溅,我花了100元,終身使用谓娃。我覺(jué)得物有所值脚乡。在這之前我覺(jué)得驗(yàn)證郵箱的有效性其實(shí)不是非常難,沒(méi)想到這個(gè)事情是有技術(shù)壁壘的滨达,出乎我的意料奶稠。
這款軟件唯一不足的地方就是沒(méi)有sdk俯艰,采用手動(dòng)倒入email地址,然后批量導(dǎo)出有效或者無(wú)效的地址窒典,然后自己再將這些地址倒入到自己的數(shù)據(jù)庫(kù)中蟆炊,進(jìn)行郵件群發(fā)稽莉,我在使用了這款軟件之后瀑志,阿里云后臺(tái)的數(shù)據(jù)準(zhǔn)確性如下圖:
可以看到無(wú)效地址非常低。
第二個(gè)需要注意的地方就是郵件模板污秆。郵件模板我之前也是覺(jué)得非常簡(jiǎn)單劈猪,不就是一個(gè)簡(jiǎn)單的html嗎? 真的如此嗎良拼?事實(shí)并不是這樣战得,每個(gè)郵件服務(wù)商針對(duì)郵件都喜歡做不同的處理,導(dǎo)致你發(fā)出的郵件庸推,客戶看到的跟你的實(shí)際上會(huì)有些區(qū)別常侦。可以參考下這篇HTML Email 編寫指南 贬媒。
那么我們?nèi)绾巫鲆粋€(gè)html模板呢聋亡,當(dāng)然是使用一個(gè)成熟的郵件模板了,這樣少了很多煩惱和兼容性的問(wèn)題际乘。這類模板網(wǎng)上有很多坡倔,可以自行搜索,我使用了這個(gè)郵件模板脖含,覺(jué)得還不錯(cuò)罪塔。
郵件群發(fā)到這里就介紹完了,主要介紹了阿里云的配置养葵,還有遇到的問(wèn)題和需要注意的地方征堪,碼字不易,如果對(duì)你有幫助关拒,歡迎點(diǎn)贊佃蚜。詳細(xì)可以查看阿里云郵件推送文檔。