代码如下:
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
/**
* 邮件发送的工具类
* 使用eyoumailserver,内部账户发邮件
*/
/*
javax.mail.Session:上下文环境信息,如服务器的主机名、端口号、协议名称等
javax.mail.Message:邮件模型,发送邮件和接收邮件的媒介,封装了邮件的信息,如发件人、收件人、邮件标题、邮件内容等
javax.mail.Transport:连接邮件SMTP服务器,发送邮件
javax.mail.Store:连接邮件POP3、IMAP服务器,收取邮件
*/
public class MailUtils2 {
private static String userName = "xiaoming@wh.cn";//发送邮件的人
private static String password = "123456";//发送邮件的账户的密码
private static String userName2 = "xiaofang@wh.cn";//接收邮件的人
private static String port = "25";//465、587,默认25
/**
* 该方法用来发送邮件
* @param to:给谁发邮件
* **/
public static void sendMain(String to) throws AddressException, MessagingException{
//1、创建连接对象,连接到邮箱服务器
Properties props = new Properties();
//开启debug调试
props.setProperty("mail.debug", "true");
//stmp服务器需要进行身份验证,也就是有户名和密码的校验,这样才能通过验证
props.setProperty("mail.smtp.auth", "true");
//发送邮件协议名称
props.setProperty("mail.transport.protocol", "smtp");
//设置邮件服务器主机名
props.setProperty("mail.smtp.host", "223.150.50.95");//本地"localhost"
//设端口号(该配置可写可不写)
props.setProperty("mail.smtp.port", port);
//Authenticator:认证信息
Session session = Session.getInstance(props, new Authenticator(){
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(userName,password);//使用它给其他账户发邮件
}
});
//2、创建邮件对象
Message message = new MimeMessage(session);
//2.1设置发件人
message.setFrom(new InternetAddress(userName));
//2、2设置收件人
message.addRecipient(RecipientType.TO, new InternetAddress(to));
//2.3邮件的主题
message.setSubject("测试发消息");
//2.4邮件的正文(即邮件的内容)
message.setContent("测试邮件:来自xiaoming@wh.cn的邮件","text/html;charset=utf-8");
//3.发送邮件
// Transport trans = session.getTransport();
// //连接邮件服务器
// trans.connect(userName, password);
// //发送邮件
// trans.sendMessage(message, message.getAllRecipients());
// //关闭连接
// trans.close();
Transport.send(message);//(两种方式都可以)
System.out.println("发送成功");
}
public static void main(String[] args) {
try {
sendMain(userName2);
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行时提示异常信息如下:
com.sun.mail.util.MailConnectException: Couldn't connect to host, port: 223.150.50.95, 25; timeout -1;
nested exception is:
java.net.ConnectException: Connection timed out: connect
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2209)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:740)
at javax.mail.Service.connect(Service.java:388)
at javax.mail.Service.connect(Service.java:246)
at javax.mail.Service.connect(Service.java:195)
at javax.mail.Transport.send0(Transport.java:254)
at javax.mail.Transport.send(Transport.java:124)
at Mail.MailUtils2.sendMain(MailUtils2.java:81)
at Mail.MailUtils2.main(MailUtils2.java:88)
Caused by: java.net.ConnectException: Connection timed out: connect
at java.base/sun.nio.ch.Net.connect0(Native Method)
at java.base/sun.nio.ch.Net.connect(Net.java:574)
at java.base/sun.nio.ch.Net.connect(Net.java:563)
at java.base/sun.nio.ch.NioSocketImpl.connect(NioSocketImpl.java:588)
at java.base/java.net.SocksSocketImpl.connect(SocksSocketImpl.java:333)
at java.base/java.net.Socket.connect(Socket.java:648)
at java.base/java.net.Socket.connect(Socket.java:597)
at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:359)
at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:238)
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:2175)
... 8 more