Java 實現郵件發送功能


1.新建model

SendMail.java

import java.util.Properties;


public class SendMail {
    // 發送郵件的服務器的IP和端口
    private String mailServerHost;    //服務器名稱,類似163的: smtp.163.com private String mailServerPort = "25";    //服務器端口號 private String fromAddress;    //發送郵件的地址 private String addressName;    //發送郵件的郵箱名稱 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 boolean isValidate() {
        return validate;
    }

    public void setValidate(boolean validate) {
        this.validate = validate;
    }

    public String[] getAttachFileNames() {
        return attachFileNames;
    }

    public void setAttachFileNames(String[] fileNames) {
        this.attachFileNames = fileNames;
    }

    public String getFromAddress() {
        return fromAddress;
    }

    public void setFromAddress(String fromAddress) {
        this.fromAddress = fromAddress;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    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 getSubject() {
        return subject;
    }

    public void setSubject(String subject) {
        this.subject = subject;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String textContent) {
        this.content = textContent;
    }

    public String getAddressName() {
        return addressName;
    }

    public void setAddressName(String addressName) {
        this.addressName = addressName;
    }
}

 

 

2.發送郵件實現類

MailSender.java

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;


public class MailSender {

    /**
     * 以文本格式發送郵件
     */
    public boolean sendTextMail(SendMail mailInfo) {
        // 判斷是否需要身份認證
        Authentication authenticator = null;
        Properties pro = mailInfo.getProperties();
        if (mailInfo.isValidate()) {
            // 如果需要身份認證,則創建一個密碼驗證器
            authenticator = new Authentication(mailInfo.getUserName(),
                    mailInfo.getPassword());
        }
        // 根據郵件會話屬性和密碼驗證器構造一個發送郵件的session
        Session sendMailSession = Session
                .getDefaultInstance(pro, authenticator);
        try {
            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);
            return true;
        } catch (MessagingException ex) {
            ex.printStackTrace();
        }
        return false;
    }

    /**
     * 以HTML格式發送郵件
     */
    public boolean sendHtmlMail(SendMail mailInfo) {
        // 判斷是否需要身份認證
        Authentication authenticator = null;
        Properties pro = mailInfo.getProperties();
        if (mailInfo.isValidate()) {
            authenticator = new Authentication(mailInfo.getUserName(),
                    mailInfo.getPassword());
        }
        // 根據郵件會話屬性和密碼驗證器構造一個發送郵件的session
        Session sendMailSession = Session
                .getDefaultInstance(pro, authenticator);
        try {
            // 根據session創建一個郵件消息
            Message mailMessage = new MimeMessage(sendMailSession);

            mailMessage.setFrom(new InternetAddress(mailInfo.getFromAddress()));
            //設置自定義發件人昵稱
            String nick="";
            try {
                nick=javax.mail.internet.MimeUtility.encodeText(mailInfo.getAddressName());
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
            mailMessage.setFrom(new InternetAddress(nick+" <"+mailInfo.getFromAddress()+">"));
//            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();
            BodyPart html = new MimeBodyPart();
            html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");
            mainPart.addBodyPart(html);
            mailMessage.setContent(mainPart);
            Transport.send(mailMessage);
            return true;
        } catch (MessagingException ex) {
            ex.printStackTrace();
        }
        return false;
    }
}

 

 

 3.郵件發送工具類

SendMailUtil.java
import java.util.HashMap;
import java.util.Map;

public class SendMailUtil {private static SendMail mail() {
        SendMail mail = new SendMail();
        mail.setMailServerHost("smtp.yeah.net");
        mail.setMailServerPort("25");
        mail.setValidate(true);
        mail.setUserName("發送郵件的郵箱地址");
        mail.setPassword("郵件服務器的客戶端授權密碼");
        mail.setFromAddress("發送郵件的郵箱地址");
        mail.setAddressName("郵箱名稱");
        mail.setSubject("標題");
        return mail;
    }

    public static boolean checkEmail(String email) {// 驗證郵箱的正則表達式
        String format = "\\p{Alpha}\\w{2,15}[@][a-z0-9]{3,}[.]\\p{Lower}{2,}";
        //p{Alpha}:內容是必選的,和字母字符[\p{Lower}\p{Upper}]等價。如:200896@163.com不是合法的。
        //w{2,15}: 2~15個[a-zA-Z_0-9]字符;w{}內容是必選的。 如:dyh@152.com是合法的。
        //[a-z0-9]{3,}:至少三個[a-z0-9]字符,[]內的是必選的;如:dyh200896@16.com是不合法的。
        //[.]:'.'號時必選的; 如:dyh200896@163com是不合法的。
        //p{Lower}{2,}小寫字母,兩個以上。如:dyh200896@163.c是不合法的。
        if (email.matches(format)) {
            return true;// 郵箱名合法,返回true
        } else {
            return false;// 郵箱名不合法,返回false
        }
    }


    public static boolean Send(String con,String email,String subject){

        SendMail mail = mail();

        mail.setSubject(subject);

        mail.setContent(con);

        if (email == null || "".equals(email)) {
            return false;
        }
        mail.setToAddress(email);

        try {
            MailSender sms = new MailSender();
            boolean flag = sms.sendHtmlMail(mail);
            if (flag == false)
                return false;
        } catch (Exception e) {
            e.printStackTrace();
            return false;
        }

        return true;
    }

}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM