背景
在我們做業(yè)務(wù)系統(tǒng)開發(fā)時(shí)時(shí),經(jīng)常會(huì)用到 郵件發(fā)送的場(chǎng)景,如 通過郵件通知給注冊(cè)用戶有關(guān)注冊(cè)碼的內(nèi)容,或者 管理的某些設(shè)備有告警了,需要郵件通知相關(guān)維護(hù)人員及時(shí)處理相關(guān)設(shè)備,還有 使用的會(huì)員服務(wù)已經(jīng)到期了,用郵件通知給用戶等等。 在java 世界里如何發(fā)郵件,有很多種方法,下面將圍繞 java mail 來做功能的實(shí)現(xiàn)。
什么是JavaMail
JavaMail,顧名思義,提供給開發(fā)者處理電子郵件相關(guān)的編程接口。它是Sun發(fā)布的用來處理email的API。它可以方便地執(zhí)行一些常用的郵件傳輸。我們可以基于JavaMail開發(fā)出類似于Microsoft Outlook的應(yīng)用程序。
前置條件
要想通過 java 代碼發(fā)送郵件,首先需要開通你郵箱的郵局服務(wù),下面以QQ 郵箱為例,說一下開通步驟。
申請(qǐng)開通郵局服務(wù)(QQ為例)
-
進(jìn)入QQ郵箱–》設(shè)置–》POP3/IMAP --》開啟服務(wù)
-
使用手機(jī),發(fā)送開通短信,開啟服務(wù)
-
開通成功,記下授權(quán)碼
獲得授權(quán)碼,把它拷貝出來,后面的JAVA代碼需要用到這個(gè)授權(quán)碼。
Java工程
下載依賴組件
我們將使用 JavaMail 進(jìn)行郵件方面的處理, Maven的依賴配置如下:
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
核心代碼
public class MailUtil {
private static final Logger LOG = LoggerFactory.getLogger(MailUtil.class);
/**
* 發(fā)送郵件
* @param user
* 發(fā)件人郵箱
* @param password
* 郵箱授權(quán)碼
* @param host
* host
* @param from
* 發(fā)件人
* @param toArray
* 接收者郵箱數(shù)組
* @param subject
* 郵件主題
* @param content
* 郵件內(nèi)容
* @return CommonProcResult.code = 0 表示成功;<br/>
* CommonProcResult.code != 0 表示失敗,失敗原因可以看 CommonProcResult.desc
*/
public CommonProcResult sendMail(String user, String password, String host,
String from, String[] toArray, String subject, String content) {
CommonProcResult ret = CommonProcResultFactroy.makeResultForInnerError("未實(shí)現(xiàn).");
try {
if (null != toArray && toArray.length > 0) {
Properties props = System.getProperties();
// 選擇服務(wù)類型
props.put("mail.smtp.host", host);
// 設(shè)置服務(wù)器驗(yàn)證
props.put("mail.smtp.auth", "true");
// 設(shè)置傳輸協(xié)議
props.put("mail.transport.protocol", "smtp");
MailAuthenticator auth = new MailAuthenticator(user, password);
Session session = Session.getInstance(props, auth);
//session.setDebug(true);
session.setDebug(false);
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(from));
//郵件接收方
int len= toArray.length;
InternetAddress address[]=new InternetAddress[len];
for (int i = 0; i < toArray.length; i++) {
address[i]=new InternetAddress(toArray[i]);
}
message.addRecipients(Message.RecipientType.TO, address);
// 主題
message.setSubject(subject);
// 正文
MimeBodyPart mbp1 = new MimeBodyPart();
mbp1.setContent(content, "text/html;charset=utf-8");
// 整個(gè)郵件:正文+附件
Multipart mp = new MimeMultipart();
mp.addBodyPart(mbp1);
message.setContent(mp);
message.setSentDate(new Date());
message.saveChanges();
// Transport trans = session.getTransport("smtp");
Transport.send(message);
//System.out.println("send mail ok:" + message.toString());
ret = CommonProcResultFactroy.makeResultForOk("");
} else {
ret = CommonProcResultFactroy.makeResultForInvalidParamValue(" toArray");
}
} catch (Exception e) {
LOG.error("An exception has been occured when send email. Exception=" + e.getMessage());
ret = CommonProcResultFactroy.makeResultForInnerException(e.getMessage());
e.printStackTrace();
}
return ret;
}
//測(cè)試代碼
public static void main(String[] args) {
MailUtil operation = new MailUtil();
String user = "發(fā)送人的郵箱"; //如xxxxxxx@qq.com
String password = "郵箱的授權(quán)密碼";
String host = "郵箱主機(jī)";//如smtp.qq.com
String from = "發(fā)件人的郵箱"; //如xxxxxxx@qq.com
String to = "收件人的郵箱"; //支持群發(fā),可以寫多個(gè)收件郵箱,如 bbbbbb@yeah.net;ccccccc@qq.com
String subject = "java 發(fā)送郵件測(cè)試";
//郵箱內(nèi)容
StringBuffer sb = new StringBuffer();
String yzm = Long.toString(System.currentTimeMillis());
sb.append("<!DOCTYPE>"
+ "<div bgcolor='#f1fcfa' style='border:1px solid #d9f4ee; font-size:14px; line-height:22px; color:#005aa0;padding-left:1px;padding-top:5px; padding-bottom:5px;'><span style='font-weight:bold;'>溫馨提示:</span>"
+ "<div style='width:950px;font-family:arial;'>歡迎xx系統(tǒng),您的注冊(cè)碼為:<br/><h2 style='color:green'>"
+ yzm
+ "</h2><br/>本郵件由系統(tǒng)自動(dòng)發(fā)出,請(qǐng)勿回復(fù)。<br/>感謝您的使用。<br/>xx網(wǎng)絡(luò)科技公司</div>"
+ "</div>");
try {
String[] toArray = to.split(";");
CommonProcResult ret = operation.sendMail(user, password, host, from, toArray, subject, sb.toString());
System.out.println("ret code=" + ret.getCode() + ", ret desc=" + ret.getDesc());
} catch (Exception e) {
e.printStackTrace();
}
}
發(fā)送結(jié)果
登錄收件人的郵箱,里可看到 測(cè)試代碼發(fā)出的郵件收到了。
總結(jié)
使用JavaMail可以很方便的在Java客戶端實(shí)現(xiàn) 發(fā)郵件的功能,另外很好的實(shí)現(xiàn)了JavaMail API的框架還有James、Spring Mail。文章來源:http://www.zghlxwxcb.cn/news/detail-568588.html
需要完整演示代碼的可點(diǎn)擊下方。
完整程序代碼下載
注意:程序代碼需要代入你的郵箱信息才能正確工作。文章來源地址http://www.zghlxwxcb.cn/news/detail-568588.html
到了這里,關(guān)于如何使用Java Mail發(fā)郵件(包括單發(fā)和群發(fā)),含演示代碼下載的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!