SSL协议开发javamail邮件发送

qq登陆修改smtp为可用,并配置文件中的password为ssl的授权码进行ssl登陆验证


package sendemail.util;

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

import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMessage.RecipientType;

import com.sun.mail.util.MailSSLSocketFactory;
 
/**
 * 邮件发送器,可单发,群发
 * 群发邮件时可能会被认为是垃圾邮件,尽量避免使用
 * 需要群发邮件时,可以采用多次单发的方式进行
 * @author 
 * 
 */
public class MailSender {
	
	/**
     * 邮箱session
     */
    private transient Session session;
    
    /**
     * 邮件服务器登录验证
     */
    private transient MailAuthenticator authenticator;
    
    /**
     * 发送邮件的props
     */
    private final transient Properties props = System.getProperties();

    /**
     * 获取邮件发送工具实例
     * 所有的发件操作均通过该实例进行
     * @param username 发件人邮箱地址
     * @param password 发件人邮箱密码
     * 
     */
    public static MailSender getSender(String username, String password) {
    	MailSender serviceSms = new MailSender(username, password);
        return serviceSms;
    }
 
    /**
     * 初始化邮件发送器
     * @param smtpHostName SMTP邮件服务器地址
     * @param username 发送邮件的用户名(邮箱地址)
     * @param password 发送邮件的密码
     * 
     */
    public MailSender(final String smtpHostName, final String username, final String password) {
    	init(username, password, smtpHostName);
    }
 
    /**
     * 初始化邮件发送器
     * @param username 发送邮件的用户名(邮箱地址),并以此解析SMTP服务器地址
     * @param password 发送邮件的密码
     * 
     */
    public MailSender(String username, final String password) {
    	
	    //通过邮箱地址解析出smtp服务器,对大多数邮箱都管用
	    String smtpHostName = "smtp." + username.split("@")[1];    
	    System.out.println("SMTP: " + smtpHostName);
	    System.out.println("Username: " + username);
	    System.out.println("Password: " + password);
	    init(username, password, smtpHostName);
	    
    }
 
    /**
     * 初始化
     * @param username 发送邮件的用户名(邮箱地址)
     * @param password 密码
     * @param smtpHostName SMTP主机地址
     */
    private void init(String username, String password, String smtpHostName) {
    	
    	//开启ssl加密 如果没有就报530错误
    	MailSSLSocketFactory sf = null;
    	try {
			sf = new MailSSLSocketFactory();
			sf.setTrustAllHosts(true);
		} catch (GeneralSecurityException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
    	props.put("mail.smtp.ssl.enable", "true");
    	props.put("mail.smtp.ssl.socketFactory", sf);
	    //初始化props
    	props.setProperty("mail.transport.protocol", "smtp");
	    props.setProperty("mail.smtp.auth", "true");
	    props.setProperty("mail.smtp.host", smtpHostName);
	    props.setProperty("mail.smtp.port", "465");
	    
	    
	    authenticator = new MailAuthenticator(username, password); //验证
	    session = Session.getInstance(props, authenticator); //创建session
	    
    }
 
    /**
     * 发送邮件
     * @param recipient 收件人邮箱地址
     * @param subject 邮件主题
     * @param content 邮件内容
     * 
     */
    public void send(String recipient, String subject, Object content) throws Exception {
    	
	    final MimeMessage message = new MimeMessage(session); //创建mime类型邮件
	    message.setFrom(new InternetAddress(authenticator.getUsername())); //设置发信人
	    message.setRecipient(RecipientType.TO, new InternetAddress(recipient)); //设置收件人
	    message.setSubject(subject); //设置主题
	    message.setContent(content.toString(), "text/html;charset=utf-8"); //设置邮件内容


	    Transport.send(message); //发送
	    /*String server = "smtp.qq.com";  
	    String username = "997109508@qq.com";  
	    String password = "19890825Wqy,."; 
	    Transport transport = session.getTransport();  
	    transport.connect(server, username, password);  
	    transport.sendMessage(message, message.getRecipients(Message.RecipientType.TO));  
	    transport.close();  */

    }
 
    /**
     * 群发邮件
     * 群发邮件时可能会被认为是垃圾邮件,尽量避免使用
     * @param recipients 收件人地址队列
     * @param subject 主题
     * @param content 内容
     * 
     */
    public void send(List<String> recipients, String subject, Object content) throws Exception {
    	
	    final MimeMessage message = new MimeMessage(session); //创建mime类型邮件
	    message.setFrom(new InternetAddress(authenticator.getUsername())); //设置发信人
	    final int count = recipients.size(); //设置收件人们
	    InternetAddress[] addresses = new InternetAddress[count];
	    for (int i = 0; i < count; i++) {
	        addresses[i] = new InternetAddress(recipients.get(i));
	    }
	    message.setRecipients(RecipientType.TO, addresses);
	    message.setSubject(subject); //设置主题
	    message.setContent(content.toString(), "text/html;charset=utf-8"); //设置邮件内容
	    Transport.send(message); //发送
	    
    }
 
    /**
     * 发送邮件
     * @param recipient 收件人邮箱地址
     * @param mail 邮件对象
     * 
     */
    public void send(String recipient, MailInfo mail) throws Exception {
    	send(recipient, mail.getSubject(), mail.getContent());
    }
 
    /**
     * 群发邮件
     * 群发邮件时可能会被认为是垃圾邮件,尽量避免使用
     * @param recipients 收件人地址队列
     * @param mail 邮件对象
     * 
     */
    public void send(List<String> recipients, MailInfo mail) throws Exception {
    	send(recipients, mail.getSubject(), mail.getContent());
    }
 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值