實現java發送郵件的過程大體有以下幾步:
- 準備一個properties文件,該文件中存放SMTP服務器地址等參數。
- 利用properties創建一個Session對象
- 利用Session創建Message對象,然後設置郵件主題和正文
- 利用Transport對象發送郵件
需要的jar有2個:activation.jar和mail.jar
直接看個demo代碼
#----------------這兩個是構建session必須的字段---------- #smtp服務器 mail.smtp.host=smtp.qq.com #身份驗證 mail.smtp.auth=true #-------------------------------------------------------------- #發送者的郵箱用戶名 mail.sender.username=[email protected] #發送者的郵箱密碼 mail.sender.password=xxxxxxxxxx
下面是發送郵件的java代碼
import java.io.IOException; import java.io.InputStream; import java.util.Properties; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeUtility; public class JavaMail { /** * Message對象將存儲我們實際發送的電子郵件信息, * Message對象被作爲一個MimeMessage對象來創建並且需要知道應當選擇哪一個JavaMail session。 */ private MimeMessage message; /** * Session類代表JavaMail中的一個郵件會話。 * 每一個基於JavaMail的應用程序至少有一個Session(可以有任意多的Session)。 * * JavaMail需要Properties來創建一個session對象。 * 尋找"mail.smtp.host" 屬性值就是發送郵件的主機 * 尋找"mail.smtp.auth" 身份驗證,目前免費郵件服務器都需要這一項 */ private Session session; /*** * 郵件是既可以被髮送也可以被受到。JavaMail使用了兩個不同的類來完成這兩個功能:Transport 和 Store。 * Transport 是用來發送信息的,而Store用來收信。對於這的教程我們只需要用到Transport對象。 */ private Transport transport; private String mailHost=""; private String sender_username=""; private String sender_password=""; private Properties properties = new Properties(); /* * 初始化方法 */ public JavaMail(boolean debug) { InputStream in = JavaMail.class.getResourceAsStream("MailServer.properties"); try { properties.load(in); this.mailHost = properties.getProperty("mail.smtp.host"); this.sender_username = properties.getProperty("mail.sender.username"); this.sender_password = properties.getProperty("mail.sender.password"); } catch (IOException e) { e.printStackTrace(); } session = Session.getInstance(properties); session.setDebug(debug);//開啓後有調試信息 message = new MimeMessage(session); } /** * 發送郵件 * * @param subject * 郵件主題 * @param sendHtml * 郵件內容 * @param receiveUser * 收件人地址 */ public void doSendHtmlEmail(String subject, String sendHtml, String receiveUser) { try { // 發件人 //InternetAddress from = new InternetAddress(sender_username); // 下面這個是設置發送人的Nick name InternetAddress from = new InternetAddress(MimeUtility.encodeWord("幻影")+" <"+sender_username+">"); message.setFrom(from); // 收件人 InternetAddress to = new InternetAddress(receiveUser); message.setRecipient(Message.RecipientType.TO, to);//還可以有CC、BCC // 郵件主題 message.setSubject(subject); String content = sendHtml.toString(); // 郵件內容,也可以使純文本"text/plain" message.setContent(content, "text/html;charset=UTF-8"); // 保存郵件 message.saveChanges(); transport = session.getTransport("smtp"); // smtp驗證,就是你用來發郵件的郵箱用戶名密碼 transport.connect(mailHost, sender_username, sender_password); // 發送 transport.sendMessage(message, message.getAllRecipients()); //System.out.println("send success!"); } catch (Exception e) { e.printStackTrace(); }finally { if(transport!=null){ try { transport.close(); } catch (MessagingException e) { e.printStackTrace(); } } } } public static void main(String[] args) { JavaMail se = new JavaMail(false); se.doSendHtmlEmail("郵件主題", "郵件內容", "[email protected]"); } }
上面只能實現文本的發送,如果我們要發送附件,就需要用到Multipart對象了。