1. 程式人生 > 其它 >java傳送郵件

java傳送郵件

java程式碼傳送郵件例項以qq郵箱為例

一、郵箱設定

qq郵件賬戶設定裡要開啟這個,開啟的時候會獲得一個16位的郵件授權碼(需要簡訊認證)

二、依賴的包pom.xml

<!--傳送郵件需要的依賴-->
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.4.7</version>
        </dependency>

三、程式碼

package com.example.demo.mail;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import java.util.Properties; import com.sun.mail.util.MailSSLSocketFactory; import javax.mail.*; import javax.mail.internet.MimeMultipart; import java.security.GeneralSecurityException; public class SendEmail { //郵件傳送主方法 public static void main(String[] args) { try { //不帶附件的郵件傳送
simpleSend("smtp.qq.com","[email protected]","fsfxxxxxxxxxxhbe","[email protected]","Hello Mail", "我的想法是把程式碼放進一個迴圈裡"); } catch (MessagingException e) { e.printStackTrace(); } catch (GeneralSecurityException e) { e.printStackTrace(); } try { //帶附件的郵件傳送 complexEmail("smtp.qq.com","[email protected]","fsfxxxxxxxxxxhbe","[email protected]","帶圖片和附件的郵件", "帶附件的郵件","E:\\1.jpg","2.jpg"); } catch (MessagingException e) { e.printStackTrace(); } catch (GeneralSecurityException e) { e.printStackTrace(); } } /* 傳送沒有附件的郵件 smtpService:郵件伺服器 sendEmail:傳送郵件 password:郵件授權碼 receiveEmail:接收郵件地址 emailTitle:郵件主題 emailText:郵件內容 */ public static void simpleSend(String smtpService,String sendEmail,String password ,String receiveEmail, String emailTitle,String emailText) throws MessagingException, GeneralSecurityException{ //建立一個配置檔案並儲存 Properties properties = new Properties(); properties.setProperty("mail.host",smtpService); properties.setProperty("mail.transport.protocol","smtp"); properties.setProperty("mail.smtp.auth","true"); //QQ存在一個特性設定SSL加密 MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); properties.put("mail.smtp.ssl.enable", "true"); properties.put("mail.smtp.ssl.socketFactory", sf); //建立一個session物件 Session session = Session.getDefaultInstance(properties, new Authenticator() { }); //開啟debug模式 session.setDebug(true); //獲取連線物件 Transport transport = session.getTransport(); //連線伺服器 transport.connect(smtpService,sendEmail,password); //建立郵件物件 MimeMessage mimeMessage = new MimeMessage(session); //郵件傳送人 mimeMessage.setFrom(new InternetAddress(sendEmail)); //郵件接收人 mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress(receiveEmail)); //郵件標題 mimeMessage.setSubject(emailTitle); //郵件內容 mimeMessage.setContent(emailText,"text/html;charset=UTF-8"); //傳送郵件 transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients()); //關閉連線 transport.close(); } /* 帶附件的郵件傳送 smtpService:郵件伺服器 sendEmail:傳送郵件 password:郵件授權碼 receiveEmail:接收郵件地址 emailTitle:郵件主題 emailText:郵件內容 */ public static void complexEmail( String smtpService,String sendEmail,String password ,String receiveEmail, String emailTitle,String emailText,String filePath,String fileName) throws MessagingException, GeneralSecurityException, MessagingException { Properties prop = new Properties(); prop.setProperty("mail.host", smtpService); //設定QQ郵件伺服器 prop.setProperty("mail.transport.protocol", "smtp"); // 郵件傳送協議 prop.setProperty("mail.smtp.auth", "true"); // 需要驗證使用者名稱密碼 // QQ郵箱設定SSL加密 MailSSLSocketFactory sf = new MailSSLSocketFactory(); sf.setTrustAllHosts(true); prop.put("mail.smtp.ssl.enable", "true"); prop.put("mail.smtp.ssl.socketFactory", sf); //1、建立定義整個應用程式所需的環境資訊的 Session 物件 Session session = Session.getDefaultInstance(prop, new Authenticator() {}); //2、通過session獲取transport物件 Transport transport = session.getTransport(); //3、通過transport物件郵箱使用者名稱和授權碼連線郵箱伺服器 transport.connect("smtp.qq.com",sendEmail,password); //4、建立郵件,傳入session物件 //訊息的固定資訊 MimeMessage mimeMessage = new MimeMessage(session); //發件人 mimeMessage.setFrom(new InternetAddress(sendEmail)); //收件人 mimeMessage.setRecipient(Message.RecipientType.TO,new InternetAddress(receiveEmail)); //郵件標題 mimeMessage.setSubject(emailTitle); //郵件內容 MimeBodyPart mimeBody = new MimeBodyPart(); DataHandler handler = new DataHandler(new FileDataSource(filePath)); mimeBody.setDataHandler(handler); //準備文字 MimeBodyPart text = new MimeBodyPart(); //5,郵件內容 text.setContent(emailText,"text/html;charset=utf-8"); //拼裝郵件正文 MimeMultipart mimeMultipart = new MimeMultipart(); mimeMultipart.addBodyPart(text); //將拼裝好的正文內容設定為主體 MimeBodyPart contentText = new MimeBodyPart(); contentText.setContent(mimeMultipart); //附件 MimeBodyPart appendix = new MimeBodyPart(); appendix.setDataHandler(new DataHandler(new FileDataSource(filePath))); appendix.setFileName(fileName); //拼接附件 MimeMultipart allFile = new MimeMultipart(); allFile.addBodyPart(appendix);//附件 傳送多個附件這裡多加幾個就ok allFile.addBodyPart(contentText);//正文 allFile.setSubType("mixed"); //正文和附件都存在郵件中,所有型別設定為mixed //放到Message訊息中 mimeMessage.setContent(allFile); mimeMessage.saveChanges();//儲存修改 //5、傳送郵件 transport.sendMessage(mimeMessage,mimeMessage.getAllRecipients()); //6、關閉連線 transport.close(); } }
View Code