Java發送郵件的幾種方式

最近的一個項目中用到了郵件發送,所以研究了一下。將其總結下來。
要發送郵件就要用到java中的JavaMail,關於JavaMailAPI的詳解呢在
(http://blog.csdn.net/imain/article/details/1453677")中有非常詳盡的介紹,我就直接上代碼了。
1:使用JavaMail發送郵件

 // 1.創建一個程序與郵件服務器會話對象 Session
 Properties props = new Properties();
 props.setProperty("mail.transport.protocol", "SMTP");
 props.setProperty("mail.smtp.host", "smtp.163.com");
 props.setProperty("mail.smtp.port", "25");
 // 指定驗證爲true
 props.setProperty("mail.smtp.auth", "true");
 props.setProperty("mail.smtp.timeout","1000");
 // 驗證賬號及密碼,密碼需要是第三方授權碼
 Authenticator auth = new Authenticator() {
 public PasswordAuthentication getPasswordAuthentication({
	return new PasswordAuthentication("*******@163.com", "*******");
            }
        };
 Session session = Session.getInstance(props, auth);

// 2.創建一個Message,它相當於是郵件內容
MimeMessage message = new MimeMessage(session);
// 設置發送者
message.setFrom(new InternetAddress("*******@163.com"));
// 設置發送方式與接收者
message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(email));
// 設置主題
message.setSubject("郵件發送測試");
// 設置內容
message.setContent(emailMsg, "text/html;charset=utf-8");

// 3.創建 Transport用於將郵件發送
Transport.send(message);

2:我用的是spring框架,spring 封裝了一個簡單易用的關於郵件發送的工具類JavaMailSenderImpl ,所以可以用JavaMailSenderImpl 來實現郵件發送。

public class MailService {
    private static final String HOST = "smtp.163.com";
    private static final Integer PORT = 25;
    private static final String USERNAME = "*******@163.com";
    private static final String PASSWORD = "*******";
    private static final String EMAILFORM = "*******@163.com";
    private static JavaMailSenderImpl mailSender = createMailSender();
    /**
     * 郵件發送器
     *
     * @return 配置好的工具
     */
    private static JavaMailSenderImpl createMailSender() {
        JavaMailSenderImpl sender = new JavaMailSenderImpl();
        sender.setHost(HOST);
        sender.setPort(PORT);
        sender.setUsername(USERNAME);
        sender.setPassword(PASSWORD);
        sender.setDefaultEncoding("Utf-8");
        Properties p = new Properties();
        p.setProperty("mail.smtp.timeout", "25000");
        p.setProperty("mail.smtp.auth", "false");
        sender.setJavaMailProperties(p);
        return sender;
    }

    /**
     * 發送郵件
     *
     * @param to 接受人
     * @param subject 主題
     * @param html 發送內容
     * @throws MessagingException 異常
     * @throws UnsupportedEncodingException 異常
     */
    public static void sendHtmlMail(String to, String subject, String html) throws MessagingException,UnsupportedEncodingException {
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        // 設置utf-8或GBK編碼,否則郵件會有亂碼
        MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
        messageHelper.setFrom(EMAILFORM, "系統名稱");
        messageHelper.setTo(to);
        messageHelper.setSubject(subject);
        messageHelper.setText(html, true);
        mailSender.send(mimeMessage);
    }
}

當然這種是硬編碼的方式了。也可以寫在資源文件中。

資源文件

mailConfig.properties
#服務器
mailHost=smtp.163.com
#端口號
mailPort=25
#郵箱賬號
mailUsername=*******@163.com
#郵箱授權碼
mailPassword=*******
#時間延遲
mailTimeout=25000
#發送人
mailFrom=*******@163.com

獲得資源文件內容

public class MailConfig {
    private static final String PROPERTIES_DEFAULT = "mailConfig.properties";
    public static String host;
    public static Integer port;
    public static String userName;
    public static String passWord;
    public static String emailForm;
    public static String timeout;
    public static String personal;
    public static Properties properties;
    static{
        init();
    }

    /**
     * 初始化
     */
    private static void init() {
        properties = new Properties();
        try{
            InputStream inputStream = MailConfig.class.getClassLoader().getResourceAsStream(PROPERTIES_DEFAULT);
            properties.load(inputStream);
            inputStream.close();
            host = properties.getProperty("mailHost");
            port = Integer.parseInt(properties.getProperty("mailPort"));
            userName = properties.getProperty("mailUsername");
            passWord = properties.getProperty("mailPassword");
            emailForm = properties.getProperty("mailFrom");
            timeout = properties.getProperty("mailTimeout");
            personal = "墨裔";
        } catch(IOException e){
            e.printStackTrace();
        }
    }
}

發送郵件

public class MailUtil {
    private static final String HOST = MailConfig.host;
    private static final Integer PORT = MailConfig.port;
    private static final String USERNAME = MailConfig.userName;
    private static final String PASSWORD = MailConfig.passWord;
    private static final String emailForm = MailConfig.emailForm;
    private static final String timeout = MailConfig.timeout;
    private static final String personal = MailConfig.personal;
    private static JavaMailSenderImpl mailSender = createMailSender();
    /**
     * 郵件發送器
     *
     * @return 配置好的工具
     */
    private static JavaMailSenderImpl createMailSender() {
        JavaMailSenderImpl sender = new JavaMailSenderImpl();
        sender.setHost(HOST);
        sender.setPort(PORT);
        sender.setUsername(USERNAME);
        sender.setPassword(PASSWORD);
        sender.setDefaultEncoding("Utf-8");
        Properties p = new Properties();
        p.setProperty("mail.smtp.timeout", timeout);
        p.setProperty("mail.smtp.auth", "false");
        sender.setJavaMailProperties(p);
        return sender;
    }

    /**
     * 發送郵件
     *
     * @param to 接受人
     * @param subject 主題
     * @param html 發送內容
     * @throws MessagingException 異常
     * @throws UnsupportedEncodingException 異常
     */
    public static void sendMail(String to, String subject, String html) throws MessagingException,UnsupportedEncodingException {
        MimeMessage mimeMessage = mailSender.createMimeMessage();
        // 設置utf-8或GBK編碼,否則郵件會有亂碼
        MimeMessageHelper messageHelper = new MimeMessageHelper(mimeMessage, true, "UTF-8");
        messageHelper.setFrom(emailForm, personal);
        messageHelper.setTo(to);
        messageHelper.setSubject(subject);
        messageHelper.setText(html, true);
        mailSender.send(mimeMessage);
    }
}

源代碼已經上傳,可以下載
https://github.com/wolf521/demo/tree/master/src/main/java/com/example/demo/mail

jar包下載
http://download.csdn.net/download/qq_32371887/10123280

發佈了27 篇原創文章 · 獲贊 24 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章