Java程序发送邮件
? 之前上網(wǎng)有看到過(guò)別人總結(jié)的使用java程序發(fā)送郵件,于是自己下來(lái)練習(xí),把自己學(xué)習(xí)的一些心得總結(jié)出來(lái).
首先我們這里需要采用兩個(gè)jar包:
?
需要的朋友可以自行上網(wǎng)去CSDN類似的網(wǎng)站上面找
順便把自己測(cè)試用例貼了出來(lái),里面有些詳細(xì)的注釋,接下來(lái)會(huì)提醒寫demo的時(shí)候大家一些注意的地方.把中間有自己遇到的問(wèn)題.貼出來(lái)供大家參考.
1.首先確保發(fā)送人的郵箱? 跟? 接收人的郵箱? 的smtp協(xié)議開著.?? ------》可以上郵箱設(shè)置里面打開.
這里使用的QQ郵箱?? 我們可以在郵箱幫助中找到QQ郵箱的pop3跟smtp服務(wù)器地址已經(jīng)開放的相應(yīng)端口 一般是465,或者是587
2.極其重要一點(diǎn):現(xiàn)在很多郵箱都采用授權(quán)碼的方式對(duì)第三方開放 pop3跟smtp服務(wù)?? ,所以我們?cè)谟绵]箱賬戶密碼登錄郵箱時(shí),記得要把密碼換成相應(yīng)的? 授權(quán)碼.
?? (需要我們手機(jī)去發(fā)短信驗(yàn)證的)
3.我們測(cè)試發(fā)送的郵件內(nèi)容有可能被郵件服務(wù)器當(dāng)成是垃圾郵件攔截掉,這里我們需要設(shè)置下.將其加入到郵件的白名單中,可避開反垃圾誤判
4.針對(duì)發(fā)送失敗的錯(cuò)誤,我們可以仔細(xì)分析出錯(cuò)的code碼,上網(wǎng)查找對(duì)應(yīng)的錯(cuò)誤碼信息,找到錯(cuò)誤的原因.
?? 這里針對(duì)發(fā)送郵箱是網(wǎng)易來(lái)說(shuō):
http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html???
?
?
?測(cè)試demo如下:
package Test;
import java.io.FileOutputStream;
import java.io.OutputStream;
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class Testmail {
?? ?// 發(fā)送郵件的賬號(hào)
?? ?public static String ownEmailAccount = "xxxxxxxxxx@163.com";
?? ?// 發(fā)送郵件的密碼------》授權(quán)碼
?? ?public static String ownEmailPassword = "xxxxxxxxxxx";
?? ?// 發(fā)送郵件的smtp 服務(wù)器 地址
?? ?public static String myEmailSMTPHost = "smtp.163.com";
?? ?// 發(fā)送郵件對(duì)方的郵箱
?? ?public static String receiveMailAccount = "xxxxxxxxxx@qq.com";
?? ?public static void main(String[] args) throws Exception {
?? ??? ?Properties prop = new Properties();
?? ??? ?// 設(shè)置郵件傳輸采用的協(xié)議smtp
?? ??? ?prop.setProperty("mail.transport.protocol", "smtp");
?? ??? ?// 設(shè)置發(fā)送人郵件服務(wù)器的smtp地址
?? ??? ?// 這里以網(wǎng)易的郵箱smtp服務(wù)器地址為例
?? ??? ?prop.setProperty("mail.smtp.host", myEmailSMTPHost);
?? ??? ?// 設(shè)置驗(yàn)證機(jī)制
?? ??? ?prop.setProperty("mail.smtp.auth", "true");
?? ??? ?// SMTP 服務(wù)器的端口 (非 SSL 連接的端口一般默認(rèn)為 25, 可以不添加, 如果開啟了 SSL 連接,
?? ??? ?// 需要改為對(duì)應(yīng)郵箱的 SMTP 服務(wù)器的端口, 具體可查看對(duì)應(yīng)郵箱服務(wù)的幫助,
?? ??? ?// QQ郵箱的SMTP(SLL)端口為465或587, 其他郵箱自行去查看)
?? ??? ?/*final String smtpPort = "465";
?? ??? ?prop.setProperty("mail.smtp.port", smtpPort);
?? ??? ?prop.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
?? ??? ?prop.setProperty("mail.smtp.socketFactory.fallback", "false");
?? ??? ?prop.setProperty("mail.smtp.socketFactory.port", smtpPort);*/
?? ??? ?// 創(chuàng)建對(duì)象回話跟服務(wù)器交互
?? ??? ?Session session = Session.getInstance(prop);
?? ??? ?// 會(huì)話采用debug模式
?? ??? ?session.setDebug(true);
?? ??? ?// 創(chuàng)建郵件對(duì)象
?? ??? ?Message message = createSimpleMail(session);
?? ??? ?Transport trans = session.getTransport();
?? ??? ?// 鏈接郵件服務(wù)器
?? ??? ?trans.connect(ownEmailAccount, ownEmailPassword);
?? ??? ?// 發(fā)送信息
?? ??? ?trans.sendMessage(message, message.getAllRecipients());
?? ??? ?// 關(guān)閉鏈接
?? ??? ?trans.close();
?? ?}
?? ?/** ?
?? ?* @Title: createSimpleMail ?
?? ?* @Description: 創(chuàng)建郵件對(duì)象
?? ?* @author: chengpeng
?? ?* @param @param session
?? ?* @param @return
?? ?* @param @throws Exception??? 設(shè)定文件 ?
?? ?* @return Message??? 返回類型 ?
?? ?* @throws ?
?? ?*/
?? ?public static Message createSimpleMail(Session session) throws Exception {
?? ??? ?MimeMessage message = new MimeMessage(session);
?? ??? ?// 設(shè)置發(fā)送郵件地址,param1 代表發(fā)送地址 param2 代表發(fā)送的名稱(任意的) param3 代表名稱編碼方式
?? ??? ?message.setFrom(new InternetAddress("xxxxxxxxx@163.com", "張三", "utf-8"));
?? ??? ?// 代表收件人
?? ??? ?message.setRecipient(Message.RecipientType.TO, new InternetAddress(receiveMailAccount, "李四", "utf-8"));
?? ??? ?// To: 增加收件人(可選)
?? ??? ?/*message.addRecipient(MimeMessage.RecipientType.TO, new InternetAddress("dd@receive.com", "USER_DD", "UTF-8"));
?? ??? ?// Cc: 抄送(可選)
?? ??? ?message.setRecipient(MimeMessage.RecipientType.CC, new InternetAddress("ee@receive.com", "USER_EE", "UTF-8"));
?? ??? ?// Bcc: 密送(可選)
?? ??? ?message.setRecipient(MimeMessage.RecipientType.BCC, new InternetAddress("ff@receive.com", "USER_FF", "UTF-8"));*/
?? ??? ?// 設(shè)置郵件主題
?? ??? ?message.setSubject("測(cè)試轉(zhuǎn)發(fā)郵件");
?? ??? ?// 設(shè)置郵件內(nèi)容
?? ??? ?message.setContent("早安,世界?? 你最近好嗎!", "text/html;charset=utf-8");
?? ??? ?// 設(shè)置發(fā)送時(shí)間
?? ??? ?message.setSentDate(new Date());
?? ??? ?// 保存上面的編輯內(nèi)容
?? ??? ?message.saveChanges();
?? ??? ?// 將上面創(chuàng)建的對(duì)象寫入本地
?? ??? ?OutputStream out = new FileOutputStream("MyEmail.eml");
?? ??? ?message.writeTo(out);
?? ??? ?out.flush();
?? ??? ?out.close();
?? ??? ?return message;
?? ?}
}
參考鏈接:http://blog.csdn.net/xietansheng/article/details/51673073
轉(zhuǎn)載于:https://www.cnblogs.com/Ant-soldier/p/6740570.html
總結(jié)
以上是生活随笔為你收集整理的Java程序发送邮件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Linux运维工程师必学必备的8项IT技
- 下一篇: JMock / Mockito 使用方式