java通过SMTP发送QQ邮件的完全步骤

来源:互联网 发布:sql建立学生表 编辑:程序博客网 时间:2024/06/06 02:09
import org.apache.logging.log4j.LogManager;import org.apache.logging.log4j.Logger;import java.util.Calendar;import java.util.Properties;import javax.mail.MessagingException;import javax.mail.Session;import javax.mail.Transport;import javax.mail.Message.RecipientType;import javax.mail.internet.InternetAddress;import javax.mail.internet.MimeMessage;/** * @version V1.0 * @Description: 发送邮件的工具类 * @Modified By:Ming Created in  16:51 2017/2/6 */public class SendEmail {    private static final Logger logger = LogManager.getLogger(SendEmail.class);    private final static String smtpHost = "smtp.qq.com";//配置Email session对象    private final static String messageType = "text/html;charset=UTF-8";//相应内容类型,编码类型    private final static String subject = "iYo (社联网) 密码修改";//主题    private final static String fromEmail = "272194539@qq.com";//发送邮件的邮箱    private final static String password = "xxxxxxxxxxxxxxxx";//密码(口令)    @SuppressWarnings("static-access")    public boolean sendMessage(String to, int id) {        try {            String messageText = appendString(id);            //第一步:配置javax.mail.Session对象            Properties props = new Properties();   // 创建Properties 类用于记录邮箱的一些属性            props.put("mail.smtp.host", smtpHost);  //此处填写SMTP服务器            props.put("mail.smtp.starttls.enable", "true");//使用 STARTTLS安全连接            props.put("mail.smtp.port", "25");             //google使用465或587端口            props.put("mail.smtp.auth", "true");       // 表示SMTP发送邮件,必须进行身份验证            props.put("mail.debug", "true");            Session mailSession = Session.getInstance(props, new MyAuthenticator(fromEmail, password));//此处填写你的账号和口令(16位口令)            //第二步:编写消息            InternetAddress fromAddress = new InternetAddress(fromEmail);// 设置发件人的邮箱            InternetAddress toAddress = new InternetAddress(to); // 设置收件人的邮箱            MimeMessage message = new MimeMessage(mailSession);            message.setFrom(fromAddress);            message.addRecipient(RecipientType.TO, toAddress);            message.setSentDate(Calendar.getInstance().getTime());            message.setSubject(subject);   // 设置邮件标题            message.setContent(messageText, messageType);// 设置邮件的内容体            // 第三步:发送消息            Transport transport = mailSession.getTransport("smtp");            transport.connect(smtpHost, fromEmail, password);            transport.send(message, message.getRecipients(RecipientType.TO)); // 发送邮件啦            return true;        } catch (MessagingException e) {            e.printStackTrace();            logger.error("邮件发送错误" + e.getMessage());            return false;        } catch (Exception e) {            logger.error("邮件发送错误" + e.getMessage());            return false;        }    }    /**     * @Author: Ming     * @param: id  用户id     * @Description: 添加发送的短信的信息     * @Date: 17:12 2017/2/6     */    public static String appendString(int id) {        int i;        String t = "&nbsp";        String messageText = "";        for (i = 0; i < 4; i++) messageText += t;        messageText += "xxxxxxxxx~<br/>";        for (i = 0; i < 12; i++) messageText += t;        messageText += "没关系,xxxxxxxxx<br/>";        for (i = 0; i < 20; i++) messageText += t;        messageText += "工作室地点:xxxxxxxxx~<br/><br/>";        for (i = 0; i < 28; i++) messageText += t;        messageText += "请点击:http://xxxxxxxxx";        return messageText;    }}
import javax.mail.Authenticator;import javax.mail.PasswordAuthentication;/** * @version V1.0 * @Description: 构建授权信息,用于进行SMTP进行身份验证 * @Modified By:Ming Created in  10:22 2017/2/7 */class MyAuthenticator extends Authenticator {    private String userName="";    private String password="";    public MyAuthenticator(String userName,String password){        this.userName=userName;        this.password=password;    }    protected PasswordAuthentication getPasswordAuthentication(){        return new PasswordAuthentication(userName, password);    }}

注意:

如果出现这个错误:javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure 这个是jdk导致的,jdk里面有一个jce的包,安全性机制导致的访问https会报错,官网上有替代的jar包,换掉就好了目录 %JAVA_HOME%\jre\lib\security里的local_policy.jar,US_export_policy.jarJDK7 http://www.oracle.com/technetwork/java/javase/downloads/jce-7-download-432124.htmlJDK8 http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

借鉴:

http://www.cnblogs.com/1995hxt/p/6185399.html

至此,邮件就应该能成功发出去啦。
本文是日常开发的随手记录,如有问题,请博内留言以帮助我改正和完善,一起努力,一起学习,一起进步!如果觉得有帮助,记得赞一个哟。

0 0