JAVA發送郵件(163郵箱)

    項目涉及到郵箱發送的功能 ,這篇博文主要是採用spring框架內集成的工具類 (JavaMailSenderImpl ),服務器採用的是163的郵箱服務器,在此不做太多內部方法的講解,主要記錄實現的代碼。其中的注意事項,如下

  需要發送人的郵箱開啓SMTP服務,例:163開啓: 登陸網頁版 ---》設置--》設置POP3/SMTP/IMAP   勾選就行。

一、硬編碼方式實現

              首先通過本地main方法來跑,如需服務器上運行請往下看。硬編碼方式沒什麼太多注意事項,只要你的郵箱服務器上開啓了" SMTP "服務,下面代碼複製就能跑。

import java.io.UnsupportedEncodingException;
import java.util.Properties;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;


/**
 * 郵件發送工具類
 * @author zhouhao
 *
 */
public class EmailUtil {
	private static final String HOST = "smtp.163.com"; // 郵箱服務器
    private static final Integer PORT = 25;	// 端口
    private static final String USERNAME = "[email protected]";    //郵箱名
    private static final String PASSWORD = "xxxx";		//密碼
    private static final String EMAILFORM = "[email protected]";  //發件人(需要與郵箱名一致,不然會出現553問題)
    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);
    }
    
    public static void main(String[] args) throws UnsupportedEncodingException, MessagingException {
    	sendHtmlMail("[email protected]", "測試郵件", "測試");
	}


}

二、服務器上運行

1、服務器上運行需要導入2個jar包,如下

 <!-- 郵件發送 -->
    <dependency>
	    <groupId>activation</groupId>
	    <artifactId>activation</artifactId>
	    <version>1.0.2</version>
	</dependency>
	
	<dependency>
	    <groupId>javax.mail</groupId>
	    <artifactId>mail</artifactId>
	    <version>1.4.7</version>
	</dependency>

 

2、相關的端口、服務器地址放入properties文件中(配置文件中賬號密碼建議加密,由於只是測試這裏沒有做加密處理

########  郵件配置     ########
#郵箱
[email protected]
#郵箱授權碼
passWord=hao123000
#發送人
[email protected]
#服務器
host=smtp.163.com
#服務器端口
port=25
#超時時間
timeOut=25000

 

代碼 如下:

import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.util.Properties;

import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;

import org.apache.log4j.Logger;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import org.springframework.mail.javamail.MimeMessageHelper;
import org.springframework.stereotype.Component;


/**
 * 郵件發送工具類
 * @author zhouhao
 * 2019-03-12
 */
@Component
public class EmailUtil {
	
	private static final Logger  logger = Logger.getLogger(EmailUtil.class);
	private static final String PROPERTIES_DEFAULT = "app.properties";
	private static String host;
    private static Integer port;
    private static String userName;
    private static String passWord;
    private static String emailForm;
    private static String timeOut;
    
    
    static{
        init();
    }
    
    private static JavaMailSenderImpl mailSender = createMailSender();

    /**
     * 初始化
     */
    private static void init() {
    	Properties properties = new Properties();
        try{
            InputStream inputStream =         EmailUtil.class.getClassLoader().getResourceAsStream(PROPERTIES_DEFAULT);
            properties.load(inputStream);
            inputStream.close();
            host = properties.getProperty("host");
            port = Integer.parseInt(properties.getProperty("port"));
            userName = properties.getProperty("userName");
            passWord = properties.getProperty("passWord");
            emailForm = properties.getProperty("emailForm");
            timeOut = properties.getProperty("timeOut");
        } catch(IOException e){
        	logger.error(e.getMessage() , e);
        }
    }
    
   
    /**
     * 郵件發送器
     *
     * @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 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);
    }
    
    public static void main(String[] args) throws UnsupportedEncodingException, MessagingException {
    	
    	//sendHtmlMail("[email protected]", "測試郵件", "測試");
	}


}

其中代碼大部分都是參考,只是對代碼進行了優化和對實現過程中出現的問題記錄,代碼 參考如下:https://blog.csdn.net/qq_32371887/article/details/72821291   

如果需要了解更多,請參考javaMail API  、http://www.runoob.com/java/java-sending-email.html   等

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章