⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sendmail.java

📁 java 实现的邮件发送类
💻 JAVA
字号:

import java.security.Security;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
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;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

public class SendMail {
	private static Log log = LogFactory.getLog(SendMail.class);
    private MimeMessage mimeMsg; 

    private Session session; 

    private Properties props; 

    //private boolean needAuth = false; 

    private String username = "myname"; 

    private String password = "mypwd";
    
    private String smtp = "smtp.gmail.com";

    private Multipart mp; 

    public SendMail() {
    }

    public void init(String smtp) {
    	this.username = username ;
    	this.password = password ;
    	this.smtp = smtp ;
        setSmtpHost(smtp);
        createMimeMessage();
    }

    /**
     * @param hostName
     *            String
     */
    public void setSmtpHost(String hostName) {
		Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
		if (props == null)
			props = System.getProperties();
		props.setProperty("mail.smtp.host", hostName);
		props.setProperty("mail.smtp.socketFactory.class",  "javax.net.ssl.SSLSocketFactory");
		props.setProperty("mail.smtp.socketFactory.fallback", "true");
		props.setProperty("mail.smtp.port", "465");
		props.setProperty("mail.smtp.socketFactory.port", "465");
		//props.put("mail.smtp.host", hostName);
	}

    /**
     * @return boolean
     */
    public boolean createMimeMessage() {
    	session = null;
    	try {
			session = Session.getDefaultInstance(props,
					new Authenticator() {
						protected PasswordAuthentication getPasswordAuthentication() {
							return new PasswordAuthentication(username, password);
						}
					});
		} catch (Exception e) {
            return false;
        }
		if(session==null)
			return false;

        try {
            mimeMsg = new MimeMessage(session); 
            mp = new MimeMultipart();
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * @param need
     *            boolean
     */
    public void setNeedAuth(boolean need) {
		if (props == null){
			System.out.println("need auth");
			props = System.getProperties();

			props.setProperty("mail.smtp.host", smtp);
			props.setProperty("mail.smtp.socketFactory.class",  "javax.net.ssl.SSLSocketFactory");
			props.setProperty("mail.smtp.socketFactory.fallback", "false");
			props.setProperty("mail.smtp.port", "465");
			props.setProperty("mail.smtp.socketFactory.port", "465");
		}
		props.put("mail.smtp.auth", "true");
//		if (need) {
//			props.put("mail.smtp.auth", "true");
//		} else {
//			props.put("mail.smtp.auth", "false");
//		}
	}

    /**
     * @param name
     *            String
     * @param pass
     *            String
     */
    public void setNamePass(String name, String pass) {
        username = name;
        password = pass;
    }
    
    public void setName(String name) {
        int idx = name.indexOf("@");
        if(idx<0)username = name;
        else username = name.substring(0,idx);
    }

    /**
     * @param mailSubject
     *            String
     * @return boolean
     */
    public boolean setSubject(String mailSubject) {
        try {
            mimeMsg.setSubject(mailSubject, "GB2312");
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    public boolean setSubject(String mailSubject, String encoding) {
        try {
            mimeMsg.setSubject(mailSubject, encoding);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * @param mailBody
     *            String
     */
    public boolean setBody(String mailBody) {
        try {
            BodyPart bp = new MimeBodyPart();
            bp.setContent(mailBody, "text/html;charset=GBK");
            mp.addBodyPart(bp);

            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * @param mailBody
     *            String
     */
    public boolean setBody(String mailBody, String encoding) {
        try {
            BodyPart bp = new MimeBodyPart();
            bp.setContent(mailBody, "text/html;charset=" + encoding);
            mp.addBodyPart(bp);

            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * @param name
     *            String
     * @param pass
     *            String
     */
    public boolean addFileAffix(String filename) {

        try {
            BodyPart bp = new MimeBodyPart();
            FileDataSource fileds = new FileDataSource(filename);
            bp.setDataHandler(new DataHandler(fileds));
            bp.setFileName(fileds.getName());

            mp.addBodyPart(bp);

            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * @param name
     *            String
     * @param pass
     *            String
     */
    public boolean setFrom(String from, String fromName) {
        try {
            mimeMsg.setFrom(new InternetAddress(from, fromName)); 
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * @param name
     *            String
     * @param pass
     *            String
     */
    public boolean setTo(String to) {
        if (to == null)
            return false;

        try {
            mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress
                    .parse(to));
            return true;
        } catch (Exception e) {
            return false;
        }

    }

    /**
     * @param name
     *            String
     * @param pass
     *            String
     */
    public boolean setCopyTo(String copyto) {
        if (copyto == null)
            return false;
        try {
            mimeMsg.setRecipients(Message.RecipientType.CC,
                    (Address[]) InternetAddress.parse(copyto));
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    /**
     * @param name
     *            String
     * @param pass
     *            String
     */
    public boolean sendout() {
        try {
            mimeMsg.setContent(mp);
            mimeMsg.saveChanges();

            Session mailSession = Session.getInstance(props, null);
            Transport transport = mailSession.getTransport("smtp");
            transport.connect((String) props.get("mail.smtp.host"), username + "@gmail.com",
                    password);
            transport.sendMessage(mimeMsg, mimeMsg
                    .getRecipients(Message.RecipientType.TO));
            transport.close();

            return true;
        } catch (Exception e) {
        	log.error(e.getMessage());
            return false;
        }
    }

    public static boolean sendMail(String setTo, String setFrom, String setFromName,
            String subject, String mailBody) throws Exception {
        SendMail sendMail = new SendMail();
        sendMail.init(sendMail.smtp);
        sendMail.setNeedAuth(false);
        sendMail.setSubject(subject);
        sendMail.setBody(mailBody);
        sendMail.setTo(setTo);
        sendMail.setFrom(setFrom, setFromName);
        sendMail.setName(setFrom);
        if (sendMail.sendout() == false) {
        	sendMail = null;
        	log.error("failed sendout to " + setTo + " by " + setFrom);
        	return false;
        }
        else {
        	log.info("secceed sendout to " + setTo + " by " + setFrom);
        	sendMail = null;
            return true;
        }
    }

    public static boolean sendMail(String setTo, String setFrom, String setFromName,
            String subject, String mailBody, String encoding)
            throws Exception {
        SendMail sendMail = new SendMail();
        sendMail.init(sendMail.smtp);
        sendMail.setNeedAuth(false);
        sendMail.setSubject(subject, encoding);
        sendMail.setBody(mailBody, encoding);
        sendMail.setTo(setTo);
        sendMail.setFrom(setFrom, setFromName);
        sendMail.setName(setFrom);
        if (sendMail.sendout() == false) {
        	sendMail = null;
        	log.error("failed sendout to " + setTo + " by " + setFrom);
        	return false;
        }
        else {
        	log.info("secceed sendout to " + setTo + " by " + setFrom);
        	sendMail = null;
            return true;
        }
    }

    /**
     * Just do it as this
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -