Java基于JavaMail实现向QQ邮箱发送邮件遇到的问题

  最近使用Java基于JavaMail实现向QQ邮箱发送邮件老是发送失败,在网上搜了下,终于找到原因,记录下。

  参考:http://www.jb51.net/article/78405.htm

  网上还有种说法,把 smtp.qq.com 换成 smtp.exmail.qq.com也不需要 SSL加密,但是没有run成功。所以还是老老实实加上 SSL 加密吧。

  下面是代码:

Mail类:

package com.xjz.mail;

import java.io.Serializable;

public class Mail implements Serializable {  
	  
    /**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	public static final String ENCODEING = "UTF-8";  
  
    private String host; // 服务器地址  
  
    private String sender; // 发件人的邮箱  
  
    private String receiver; // 收件人的邮箱  
  
    private String name; // 发件人昵称  
  
    private String username; // 账号  
  
    private String password; // 密码  
  
    private String subject; // 主题  
  
    private String message; // 信息(支持HTML)  
  
    public String getHost() {  
        return host;  
    }  
  
    public void setHost(String host) {  
        this.host = host;  
    }  
  
    public String getSender() {  
        return sender;  
    }  
  
    public void setSender(String sender) {  
        this.sender = sender;  
    }  
  
    public String getReceiver() {  
        return receiver;  
    }  
  
    public void setReceiver(String receiver) {  
        this.receiver = receiver;  
    }  
  
    public String getName() {  
        return name;  
    }  
  
    public void setName(String name) {  
        this.name = name;  
    }  
  
    public String getUsername() {  
        return username;  
    }  
  
    public void setUsername(String username) {  
        this.username = username;  
    }  
  
    public String getPassword() {  
        return password;  
    }  
  
    public void setPassword(String password) {  
        this.password = password;  
    }  
  
    public String getSubject() {  
        return subject;  
    }  
  
    public void setSubject(String subject) {  
        this.subject = subject;  
    }  
  
    public String getMessage() {  
        return message;  
    }  
  
    public void setMessage(String message) {  
        this.message = message;  
    }
}

邮件工具类:

package com.xjz.mail;

import org.apache.commons.mail.EmailException;
import org.apache.commons.mail.HtmlEmail;
import org.slf4j.Logger;
import org.slf4j.impl.Log4jLoggerFactory;

/**
 * 邮件发送工具实现类
 * @author Administrator
 *
 */
public class MailUtil {
	protected final Logger logger = new Log4jLoggerFactory().getLogger("loggerSlfj");
	  
    public boolean send(Mail mail) {  
        // 发送email  
        HtmlEmail email = new HtmlEmail();
        try {  
        	email.setSSLOnConnect(true);
            // 这里是SMTP发送服务器的名字:163的如下:"smtp.163.com"  
            email.setHostName(mail.getHost());  
            // 字符编码集的设置  
            email.setCharset(Mail.ENCODEING);  
            // 收件人的邮箱  
            email.addTo(mail.getReceiver());  
            // 发送人的邮箱  
            email.setFrom(mail.getSender(), mail.getName());  
            // 如果需要认证信息的话,设置认证:用户名-密码。分别为发件人在邮件服务器上的注册名称和密码  
            email.setAuthentication(mail.getUsername(), mail.getPassword());  
            // 要发送的邮件主题  
            email.setSubject(mail.getSubject());  
            // 要发送的信息,由于使用了HtmlEmail,可以在邮件内容中使用HTML标签  
            email.setMsg(mail.getMessage());  
            // 发送  
            email.send();  
            if (logger.isDebugEnabled()) {  
                logger.debug(mail.getSender() + " 发送邮件到 " + mail.getReceiver());  
            }  
            return true;  
        } catch (EmailException e) {  
            e.printStackTrace();  
            logger.info(mail.getSender() + " 发送邮件到 " + mail.getReceiver()  
                    + " 失败");  
            return false;  
        }  
    }  
  
}  

  

测试代码:

package com.xjz.mail;

import org.junit.Test;

public class TestMail {
	@Test
	public void testMail() {
		Mail mail = new Mail();
		mail.setHost("smtp.qq.com"); // 设置邮件服务器,如果不用163的,自己找找看相关的
		mail.setSender("xxxxxx@qq.com"); // 发送人
		mail.setReceiver("xxxxxx@qq.com"); // 接收人
		mail.setUsername("xxxxxx@qq.com"); // 登录账号,一般都是和邮箱名一样吧
		mail.setPassword("xxxxxx"); // 授权码
		mail.setSubject("test");
		mail.setMessage("test");
		new MailUtil().send(mail);
	}
}

  

原文地址:https://www.cnblogs.com/dangzhenjiuhao/p/6907108.html