JavaMail(一):利用JavaMail發送簡單郵件

来源:http://www.cnblogs.com/flythinking/archive/2017/05/13/6850279.html
-Advertisement-
Play Games

JavaMail,提供給開發者處理電子郵件相關的編程介面。它是Sun發佈的用來處理email的API。它可以方便地執行一些常用的郵件傳輸。但它並沒有包含在JDK中,要使用JavaMail首先要下載javax.mail.jar下載地址:https://javaee.github.io/javamail ...


       JavaMail,提供給開發者處理電子郵件相關的編程介面。它是Sun發佈的用來處理email的API。它可以方便地執行一些常用的郵件傳輸。但它並沒有包含在JDK中,要使用JavaMail首先要下載javax.mail.jar下載地址:https://javaee.github.io/javamail/

       自定義驗證:            

/**
 * 自定義驗證
 * @author fly
 * @時間 2017-05-09
 *
 */
public class MyAuthenticator extends Authenticator{

    private String userName;
    private String password;
    
    public MyAuthenticator() {
    }
    
    
    public MyAuthenticator(String userName, String password) {
        this.userName = userName;
        this.password = password;
    }



    @Override
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(userName, password);
    }
  
}

     

     封裝發郵件信息:   

/**
 * 封裝發郵件信息
 * @author fly
 * @時間 2017-05-09
 */
public class MailSenderInfo {
   
    // 發送郵件的伺服器的IP和埠 
    private String mailServerHost;
    private String mailServerPort = "25";
    // 郵件發送者的地址 
    private String fromAddress;
    // 郵件接收者的地址
    private String toAddress;
    // 登陸郵件發送伺服器的用戶名和密碼 
    private String userName;
    private String password;
    // 是否需要身份驗證
    private boolean validate = false;
    // 郵件主題  
    private String subject;
    // 郵件的文本內容 
    private String content;
    // 郵件附件的文件名 
    private String[] attachFileNames;
    
    
    /**   
     * 獲得郵件會話屬性   
     */    
    public Properties getProperties(){
        Properties p = new Properties();
        p.put("mail.smtp.host", this.mailServerHost);
        p.put("mail.smtp.port", this.mailServerPort);
        p.put("mail.smtp.auth", validate ? "true" : "false");
        return p;
    }
    
    public String getMailServerHost() {
        return mailServerHost;
    }
    public void setMailServerHost(String mailServerHost) {
        this.mailServerHost = mailServerHost;
    }
    public String getMailServerPort() {
        return mailServerPort;
    }
    public void setMailServerPort(String mailServerPort) {
        this.mailServerPort = mailServerPort;
    }
    public String getFromAddress() {
        return fromAddress;
    }
    public void setFromAddress(String fromAddress) {
        this.fromAddress = fromAddress;
    }
    public String getToAddress() {
        return toAddress;
    }
    public void setToAddress(String toAddress) {
        this.toAddress = toAddress;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    public boolean isValidate() {
        return validate;
    }
    public void setValidate(boolean validate) {
        this.validate = validate;
    }
    public String getSubject() {
        return subject;
    }
    public void setSubject(String subject) {
        this.subject = subject;
    }
    public String getContent() {
        return content;
    }
    public void setContent(String content) {
        this.content = content;
    }
    public String[] getAttachFileNames() {
        return attachFileNames;
    }
    public void setAttachFileNames(String[] attachFileNames) {
        this.attachFileNames = attachFileNames;
    }
    
}

   

    封裝發送郵件代碼

/**
 * 封裝發送郵件代碼
 * @author fly
 * @時間 2017-05-09
 *
 */
public class Email {
    
    /**
     * 以文本格式發送郵件
     * @param mailInfo    待發送郵件信息
     * @throws Exception
     */
    public static void sendTextMail(MailSenderInfo mailInfo) throws Exception{
        // 判斷是否需要身份認證
        MyAuthenticator authenticator = null;
        Properties pro = mailInfo.getProperties();
        
        if(mailInfo.isValidate()){
             // 如果需要身份認證,則創建一個密碼驗證器
            authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
        }
        // 根據郵件會話屬性和密碼驗證器構造一個發送郵件的session
        Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
        // 根據session創建一個郵件消息
        Message mailMessage = new MimeMessage(sendMailSession);
        // 創建郵件發送者地址
        Address from = new InternetAddress(mailInfo.getFromAddress());
        // 設置郵件消息的發送者
        mailMessage.setFrom(from);
        // 創建郵件的接收者地址,並設置到郵件消息中
        Address to = new InternetAddress(mailInfo.getToAddress());
        mailMessage.setRecipient(Message.RecipientType.TO, to);
        // 設置郵件消息的主題
        mailMessage.setSubject(mailInfo.getSubject());
        // 設置郵件消息發送的時間
        mailMessage.setSentDate(new Date());
        // 設置郵件消息的主要內容
        String mailContent = mailInfo.getContent();
        mailMessage.setText(mailContent);
        // 發送郵件
        Transport.send(mailMessage);
    }
    
    /**
     * 以HTML格式發送郵件
     * @param mailInfo   待發送郵件信息
     * @throws Exception
     */
    public static void sendHtmlMail(MailSenderInfo mailInfo) throws Exception{
        // 判斷是否需要身份認證
                MyAuthenticator authenticator = null;
                Properties pro = mailInfo.getProperties();
                
                if(mailInfo.isValidate()){
                     // 如果需要身份認證,則創建一個密碼驗證器
                    authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());
                }
                // 根據郵件會話屬性和密碼驗證器構造一個發送郵件的session
                Session sendMailSession = Session.getDefaultInstance(pro, authenticator);
                // 根據session創建一個郵件消息
                Message mailMessage = new MimeMessage(sendMailSession);
                // 創建郵件發送者地址
                Address from = new InternetAddress(mailInfo.getFromAddress());
                // 設置郵件消息的發送者
                mailMessage.setFrom(from);
                // 創建郵件的接收者地址,並設置到郵件消息中
                Address to = new InternetAddress(mailInfo.getToAddress());
                // Message.RecipientType.TO屬性表示接收者的類型為TO
                mailMessage.setRecipient(Message.RecipientType.TO, to);
                // 設置郵件消息的主題
                mailMessage.setSubject(mailInfo.getSubject());
                // 設置郵件消息發送的時間
                mailMessage.setSentDate(new Date());
                Multipart mainPart = new MimeMultipart();
                // 創建一個包含HTML內容的MimeBodyPart
                BodyPart html = new MimeBodyPart();
                html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
                mainPart.addBodyPart(html);
                // 將MiniMultipart對象設置為郵件內容
                mailMessage.setContent(mainPart);
                // 發送郵件
                Transport.send(mailMessage);
    }

    

        測試程式:

public class JavaMailTest {
   
    public static void main(String[] args) {
//設置郵件相關信息 MailSenderInfo mailInfo
= new MailSenderInfo(); mailInfo.setMailServerHost("smtp.163.com"); mailInfo.setMailServerPort("25"); mailInfo.setValidate(true); mailInfo.setUserName("[email protected]"); mailInfo.setPassword(""); // 您的郵箱密碼,若你的郵箱開啟了客戶端授權密碼,則此處是您的客戶端授權密碼 mailInfo.setFromAddress("[email protected]"); mailInfo.setToAddress("[email protected]"); mailInfo.setSubject("這是一封測試郵件"); mailInfo.setContent("你好!這是一封測試郵件"); try { Email.sendTextMail(mailInfo); //Email.sendHtmlMail(mailInfo); } catch (Exception e) { e.printStackTrace(); } } }

     

     發送成功截圖如下:

         


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Nginx具有反向代理(註意和正向代理的區別)和負載均衡等特點。 這次Nginx安裝在 192.168.1.108 這台linux 機器上。安裝Nginx 先要裝openssl庫,gcc,PCRE,zlib庫等。 Tomcat 安裝在192.168.1.168 和 192.168.1.178 這兩台 ...
  • 多線程 多線程是我們開發人員經常提到的一個名詞。為什麼會有多線程的概念呢?我們的電腦有可能會有多個cpu(或者CPU有多個內核)這就產生了多個線程。對於單個CPU來說,由於CPU運算很快,我們在電腦上運行多個軟體時,每個軟體在CPU上運行很短的時間就會切換成其他軟體。由於來回切換的時間很短,我們感覺 ...
  • java中常用的包、類、以及包中常用的類、方法、屬性 常用的包 java.io.*; java.util.*; java.lang.*; java.math.*; java.sql.*; java.text.*; java.awt.*; javax.swing.*; 包名 介面 類 方法 屬性 ja ...
  • 前面一篇文章講瞭如何快速搭建一個ActiveMQ的示常式序,ActiveMQ是JMS的實現,那這篇文章就再看下另外一種消息隊列AMQP的代表實現RabbitMQ的簡單示例吧。在具體講解之前,先通過一個圖來概覽下: 1.添加Maven依賴 2.Spring配置文件中添加rabbitmq相關配置 1)消 ...
  • java產生隨機數的幾種方式 一.在j2se里我們可以使用Math.random()方法來產生一個隨機數,這個產生的隨機數是0-1之間的一個double,用時需要int強制轉換,我們可以把他乘以一定的數,比如說乘以100,他就是個100以內的隨機,這個在j2me中沒有。 java.util.Rand ...
  • title: Servlet之JSP tags: [] notebook: javaWEB JSP是什麼 ? JSP就是Servlet,全名是"JavaServer Pages" 。因為Servlet不適合設置html響應體,需要大量的 ,而和html是靜態頁面,不能包含動態信息。JSP完美的解決了 ...
  • java中常用的包、類、以及包中常用的類、方法、屬性 常用的包 java.io.*; java.util.*; java.lang.*; java.math.*; java.sql.*; java.text.*; java.awt.*; javax.swing.*; 包名 介面 類 方法 屬性 ja ...
  • 題目描述 對於給定的一個長度為N的正整數數列A[i],現要將其分成連續的若幹段,並且每段和不超過M(可以等於M),問最少能將其分成多少段使得滿足要求。 輸入輸出格式 輸入格式: 輸入文件divide_a.in的第1行包含兩個正整數N,M,表示了數列A[i]的長度與每段和的最大值,第2行包含N個空格隔 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...