java 實現郵箱發送郵件功能

郵箱驗證是一個很常見的功能了,基本上每個網站都會用的到,java也有專門的jar來處理郵件發送等服務,這裏只是簡單的實現一下發送郵件的功能,具體jar包就不再提供了,我會把所有需要引用的包都貼出來,方便大家copy。直奔主題:

第一步:封裝發件人賬號密碼

複製代碼
複製代碼
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;

/**
 * 發件人賬號密碼
 * @author zhangdi
 *
 */
public class MailAuthenticator extends   Authenticator{

    public static String USERNAME = "";
    public static String PASSWORD = "";

    public MailAuthenticator() {
    }

    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(USERNAME, PASSWORD);
    }

}
複製代碼
複製代碼

第二步:提供發送操作類

複製代碼
複製代碼
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;/**
 * 郵件發送操作類
 * 
 * @author zhangdi
 * 
 */
public class MailOperation {

    /**
     * 發送郵件
     * @param user 發件人郵箱
     * @param password 授權碼(注意不是郵箱登錄密碼)
     * @param host 
     * @param from 發件人
     * @param to 接收者郵箱
     * @param subject 郵件主題
     * @param content 郵件內容
     * @return success 發送成功 failure 發送失敗
     * @throws Exception
     */
    public String sendMail(String user, String password, String host,
            String from, String to, String subject, String content)
            throws Exception {
        if (to != null){
            Properties props = System.getProperties();
            props.put("mail.smtp.host", host);
            props.put("mail.smtp.auth", "true");
            MailAuthenticator auth = new MailAuthenticator();
            MailAuthenticator.USERNAME = user;
            MailAuthenticator.PASSWORD = password;
            Session session = Session.getInstance(props, auth);
            session.setDebug(true);
            try {
                MimeMessage message = new MimeMessage(session);
                message.setFrom(new InternetAddress(from));
                if (!to.trim().equals(""))
                    message.addRecipient(Message.RecipientType.TO,
                            new InternetAddress(to.trim()));
                message.setSubject(subject);
                MimeBodyPart mbp1 = new MimeBodyPart(); // 正文
                mbp1.setContent(content, "text/html;charset=utf-8");
                Multipart mp = new MimeMultipart(); // 整個郵件:正文+附件
                mp.addBodyPart(mbp1);
                // mp.addBodyPart(mbp2);
                message.setContent(mp);
                message.setSentDate(new Date());
                message.saveChanges();
                Transport trans = session.getTransport("smtp");
                trans.send(message);
                System.out.println(message.toString());
            } catch (Exception e){
                e.printStackTrace();
                return "failure";
            }
            return "success";
        }else{            
            return "failure";
        }
    }

}
複製代碼
複製代碼

第三步:測試

複製代碼
複製代碼
    public static void main(String[] args) {

        MailOperation operation = new MailOperation();
        String user = "你的郵箱地址";
        String password = "你的郵箱授權碼";
        String host = "smtp.163.com"; //163郵箱服務器
        String from = "你的郵箱地址";
        String to = "目標郵箱地址";// 收件人
        String subject = "輸入郵件主題";
        //郵箱內容
        StringBuffer sb = new StringBuffer();
        String yzm = RandomUtil.getRandomString(6);
        sb.append("<!DOCTYPE>"+"<div bgcolor='#f1fcfa'   style='border:1px solid #d9f4ee; font-size:14px; line-height:22px; color:#005aa0;padding-left:1px;padding-top:5px;   padding-bottom:5px;'><span style='font-weight:bold;'>溫馨提示:</span>"+ "<div style='width:950px;font-family:arial;'>您的註冊碼爲:<br/><h2 style='color:green'>"+yzm+"</h2><br/>本郵件由系統自動發出,請勿回覆。<br/>感謝您的使用。</div>"+"</div>");
        try {
            String res = operation.sendMail(user, password, host, from, to,
                    subject, sb.toString());
            System.out.println(res);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
複製代碼
複製代碼

注意:郵件發送很簡單,不過有幾個地方需要注意一下:

  1、發件人的密碼不是你登錄郵箱的密碼,而是設置POP3/SMTP/IMAP是獲取的授權碼,如下圖(截取自163郵箱);

  2、如果使用QQ郵箱作爲發件郵箱的話,需要專門配置SSL證書等等信息,這是因爲QQ郵箱的要求(當然省事的做法就使用企業郵箱或者其他郵箱提供商比如163);

  3、如果使用了其他郵箱服務商提供的郵箱來作爲發件人,那麼在編輯郵件內容的時候需要注意一些敏感詞的問題,如果你的郵件中含有敏感內容的話郵箱服務商將不會爲你發送該郵件;

  4、如果是在main方法中調用的話是可以的,但是如果要部署到web容器(比如tomcat)中的話,則需要引入兩個jar包

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