1. 程式人生 > >Java使用javax.mail傳送郵件

Java使用javax.mail傳送郵件

這裡使用maven專案進行開發

1.首先pom中載入jar

 <dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.5.6</version>
   </dependency>

2.定義3個類來輔助開發:

第一個類:MailServerConfig:用於定義傳送郵件的基本資訊
public class MailServerConfig {

    private String mailServerUrl;
    private String mailServerPort;
    private String mailAccount;
    private String password;
    private String sender;
    private Boolean proxySet;
    private String proxyType;
    private String proxyHost;
    private String proxyPort;

}

第二個類SimpleAuthenticator:用於定義驗證傳送郵件的賬號密碼:

public class SimpleAuthenticator extends Authenticator {

    String userName = null;
    String password = null;

    public SimpleAuthenticator() {
    }

    public SimpleAuthenticator(String username, String password) {
        this.userName = username;
        this.password = password;
    }

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

第三個類MailServerConfig用於使用代理的情況

public class MailServerConfig {

    private String mailServerUrl;
    private String mailServerPort;
    private String mailAccount;
    private String password;
    private String sender;
    private Boolean proxySet;
    private String proxyType;
    private String proxyHost;
    private String proxyPort;

}

3.實現傳送邏輯類:

public class SimpleMailSender {

 
    /**
     * 以HTML格式傳送郵件
     *
     * @param mailInfo
     *            待發送的郵件資訊
     */
    public boolean sendHtmlMail(MailSendInfo mailInfo) throws MessagingException{
        // 判斷是否需要身份認證
        SimpleAuthenticator authenticator = null;
        Properties pro = mailInfo.getProperties();
        // 代理設定
        // pro.setProperty("proxySet", "true");
        // pro.setProperty("socksProxyHost", "代理地址");
        // pro.setProperty("socksProxyPort", "80");
        if (mailInfo.getProxySet()) {
            if (mailInfo.getProxyType().equals("socks")) {
                pro.setProperty("proxySet", "true");
                pro.setProperty("socksProxyHost", mailInfo.getProxyHost());
                pro.setProperty("socksProxyPort", mailInfo.getProxyPort());
            }
        }
        // 如果需要身份認證,則建立一個密碼驗證器
        if (mailInfo.isValidate()) {
            authenticator = new SimpleAuthenticator(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());
        // MiniMultipart類是一個容器類,包含MimeBodyPart型別的物件
        Multipart mainPart = new MimeMultipart();
        // 建立一個包含HTML內容的MimeBodyPart
        BodyPart html = new MimeBodyPart();
        // 設定HTML內容
        html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
        System.out.println("mailContent:" + mailInfo.getContent());
        mainPart.addBodyPart(html);
        // 將MiniMultipart物件設定為郵件內容
        mailMessage.setContent(mainPart);
        mailMessage.saveChanges();
        // 傳送郵件
        System.out.println("要傳送郵件了!");
        Transport.send(mailMessage);
        System.out.println("郵件發完了!");
        return true;
    }

}

4.測試類test:

 @Test
   public void test(){
       MailServerConfig mailServerConfig = new MailServerConfig();
       mailServerConfig.setMailServerUrl("pop3郵件伺服器地址");
       mailServerConfig.setMailServerPort("pop3埠");
       mailServerConfig.setMailAccount("郵件賬號");
       mailServerConfig.setPassword("傳送郵件密碼");
       mailServerConfig.setSender("使用者名稱");
       mailServerConfig.setProxySet(false);
       mailServerConfig.setProxyType("socks");
       mailServerConfig.setProxyHost("代理地址");
       mailServerConfig.setProxySet(false);
       mailServerConfig.setProxyPort("80");
       try {
        setEmail(mailServerConfig, "接收郵箱地址", "郵件的主題名",
                    "郵件內容");
    } catch (MessagingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
       
   }
   public static void setEmail(MailServerConfig mailServerConfig, String receiverEmail, String subject, String content)
            throws MessagingException {
        
        String mailServerHost = mailServerConfig.getMailServerUrl();
        String mailServerPort = mailServerConfig.getMailServerPort();
        String fromAddress = mailServerConfig.getMailAccount();
        String userName = mailServerConfig.getSender();
        String password = mailServerConfig.getPassword();
        
        MailSendInfo mailSendInfo = new MailSendInfo();
        mailSendInfo.setMailServerHost(mailServerHost);
        mailSendInfo.setMailServerPort(mailServerPort);
        mailSendInfo.setFromAddress(fromAddress);
        mailSendInfo.setUserName(userName);
        mailSendInfo.setPassword(password);
        mailSendInfo.setToAddress(receiverEmail);
        mailSendInfo.setValidate(true);
        mailSendInfo.setSubject(subject);
        mailSendInfo.setContent(content);
        mailSendInfo.setProxySet(mailServerConfig.getProxySet());
        mailSendInfo.setProxyType(mailServerConfig.getProxyType());
        mailSendInfo.setProxyHost(mailServerConfig.getProxyHost());
        mailSendInfo.setProxyPort(mailServerConfig.getProxyPort());
        SimpleMailSender simpleMailSender = new SimpleMailSender();
        System.out.println("郵件資訊準備完畢,simpleMailSender開始傳送郵件");
        try {
            simpleMailSender.sendHtmlMail(mailSendInfo);
        } catch (javax.mail.MessagingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println("simpleMailSender郵件傳送完畢");
    }

這個只是簡單的測試用例!

相關推薦

javax.mail 傳送郵件(工具類)

前言:注意自己郵箱賬號的授權碼 傳送不成功,要設定授權碼(勿掉坑裡) 1.座標 <dependency> <groupId>javax.mail</groupId> <artifactId&

centos-sendmail&mail傳送郵件

一、安裝: 安裝sendmail: yum -y install sendmail systemctl start sendmail 安裝mailx: yum install -y mailx 二、傳送: 通過檔案內容傳送:

Linux實用技巧——mail傳送郵件命令以及中文亂碼解決

文章目錄 0 前言及準備 1 mailx安裝及配置 1.1 安裝 1.2 編輯配置檔案 2 傳送郵件 2.1 無正文郵件 2.2 有正文郵件 3 郵件中文亂碼問題解決

Java mail 傳送郵件 主題(標題)亂碼

最近開發遇到Javamail  傳送郵件標題亂碼問題,騰訊、網易郵箱不會亂碼,阿里郵箱  標題則會亂碼。解決辦法: String subject = MimeUtility.encodeWord(mailEntity.getMailSubject(), "UTF-8", "Q");

Java.Mail 傳送郵件工具類

1.首先確保傳送人的郵箱  跟  接收人的郵箱  的smtp協議開著.   ------》可以上郵箱設定裡面開啟. 這裡使用的QQ郵箱   我們可以在郵箱幫助中找到QQ郵箱的pop3跟smtp伺服器地址已經開放的相應埠 一般是465,或者是587 2.極其重要一點

Javax.mail 傳送郵件異常

一、執行過程丟擲異常 1、Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream 原因:此異常多出現在J2EE版本的郵件服務中,因為J2EE原

java mail 傳送郵件

程式碼 package test.smtp; import javax.mail.Authenticator; import javax.mail.PasswordAuthentication; import javax.mail.Session; import java

Java Mail 傳送郵件126、163 、QQ

下面是傳送的程式碼(可測試) //1、創 建 連 接 對 象,連 接 到 郵 箱 服 務 器 Properties props = new Properties(); //開 啟 debug 調 試 props.setProperty("mail.

linux學習-mail傳送郵件mail不能發郵件

主機:centos 7 , 安裝sendmail,啟動sendmail,一般就可以了,但是有些同學為什麼不行,就是啟不動出現如下的情況!那現在如何解決。 yum install sendmailsystemctl start sendmail.service system

System.Net.Mail 傳送郵件

主要是用到了System.Web.Mail名稱空間,用到了此空間的三個類,分別是: ●MailMessage類,用於構造電子郵件 ●MailAttachment類,用於構造電子郵件附件 ●SmtpMail類,用於傳送電子郵件及其附件 1、MailMessage類構造電子郵件 此類主要有以下屬性和方法 ★F

Linux——使用mail傳送郵件給外部郵箱

相信大家都用過電子郵箱,例如網易163、騰訊QQ、Gmail等等。 在上一篇部落格裡小編剖析了crond&crontab(部落格連結http://blog.csdn.net/enchanting_/article/details/73752291),然

[python3.6 flask web學習]使用Flask-Mail傳送郵件

首先進入虛擬環境安裝flask-mail擴充套件模組 pip install flask-mail 傳送郵件需要配置傳送郵件的伺服器。flask-mail固定的配置變數名如下 在macos或者linux作業系統中使用export命令匯入環境變數 export MAIL_

linux中用命令mail傳送郵件

把文字資訊作為郵件內容傳送給[email protected] cat a.txt|mail -s hello [email protected] 把a.txt的內容作為輸出,給mail命令傳送,-s代表郵件標題,[email protecte

Java使用javax.mail傳送郵件

這裡使用maven專案進行開發 1.首先pom中載入jar  <dependency>     <groupId>com.sun.mail</groupId>     <artifactId>javax.mail</ar

centos 7 rhel7怎麼用mail傳送郵件 到163 外部郵箱

centos7種自帶 mail,不用再安裝其他軟體 1.在mail.rc下配置檔案追加以下內容, vim /etc/mail.rc #163發郵件配置 set from=***@163.com  # ***@163.com 是自己傳送方的郵箱 set smtp=smt

Java mail傳送郵件示例

package com.zhangxueliang.demo; import java.util.*; import javax.mail.*; import javax.mail.Message.R

使用Flask-Mail傳送郵件

簡介 在WEB開發時,我們常常會使用到傳送郵件的功能,註冊時或者更換密碼時,需要驗證郵箱,在flask的擴充套件中有Flask-mai來幫助完成這一功能 配置 flask-mail傳送郵件需要你提供你的郵箱賬號和密碼。某些配置是傳送郵箱所必須的·。大部

JAVA MAIL傳送郵件例項

 專案用到一需求,完成特定任務後需要自動發郵件給客戶,看了下javamail比較簡單...不囉嗦,你懂的,然後就開始寫寫個簡單的入門,先百度找到 mail.jar ,commons-email-X.X.jar ,activation.jar 這三個jar,放進專案裡 先寫

Java使用javax.mail傳送郵件 解決收件人、發件人名字亂碼問題

/*** 格式化 Name <[email protected]> 的地址* @param name 名字* @param email Email地址* @return 格式化的地址*/public static String formatAddres

Laravel 5.4 使用 Mail 傳送郵件獲取驗證碼功能(使用的配置郵箱為126郵箱)

1 <?php 2 3 namespace App\Modules\Liveapi\Http\Controllers\Personnel; 4 5 use App\Modules\Liveapi\Http\Controllers\Controller; 6 use Illuminate