JavaMail用QQ邮箱发送邮件

时间:2022-09-24 20:24:10

由于在最近的学习上要用到发送邮件的功能,所以学习了JavaMail,但是在使用QQ邮箱的时候发现了一个问题,使用服务器smtp.qq.com端口号为的时候会发生A secure connection is requiered(such as ssl)的异常,说这个不安全,后来去网上查了以后发现25端口是非SSL协议端口号,但是改成465端口号的时候就运行不出来587端口号的时候就出现Could not connect to SMTP host的异常,在网上查了一系列资料,都说把服务器改成smtp.exmail.qq.com就可以了,但是我实验了还是不行,改了之后又会报Invalid domain name的异常,当时就很纳闷到底是怎么一回事~

后来经过查找发现只要在Properties下面调用put方法加上这两个参数就好了properties.put("mail.smtp.ssl.enable", "true");

下面是我用的JavaMali的版本以及jar包和源代码

版本:javamail1_4_7(mailapi.jar,smtp.jar)

下载地址:http://pan.baidu.com/s/1hqiOEMS

import java.security.GeneralSecurityException;
import java.util.Properties;
import javax.mail.Address;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import com.sun.mail.util.MailSSLSocketFactory;


public class Mail {


public static void sendMail() {
try {
Properties props = new Properties();
//普通客户端
props.setProperty("mail.smtp.auth", "true");
//选择协议
props.setProperty("mail.transport.protocol", "smtp");
MailSSLSocketFactory sf = new MailSSLSocketFactory();
sf.setTrustAllHosts(true);
props.put("mail.smtp.ssl.enable", "true");
props.put("mail.smtp.ssl.socketFactory", sf);
//
Session session = Session.getDefaultInstance(props);
// 设置debug模式 在控制台看到交互信息
session.setDebug(true);
// 建立一个要发送的信息(邮件的标题,内容等)
Message msg = new MimeMessage(session);
// 设置简单的发送内容
msg.setText("hello");
msg.setFrom(new InternetAddress("qing.suibian@foxmail.com"));// 发件人邮箱号
//邮件标题
msg.setSubject("test");
// 发送信息的工具
Transport transport = session.getTransport();
// 发件人邮箱号// 和密码
transport.connect("smtp.qq.com", 465, "fajianren@qq.com",
"password");
transport.sendMessage(msg, new Address[] { new InternetAddress(
"shoujianren@qq.com") });// 对方的地址
transport.close();


} catch (MessagingException e) {
e.printStackTrace();
} catch (GeneralSecurityException e) {
e.printStackTrace();
}
}
}