Java SMTP发送邮件
2010-03-04 16:11
351 查看
package egtl.test;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import java.util.Properties;
import java.util.Date;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.Message;
import javax.mail.internet.MimeMessage;
public class SMTPSender {
public static void main(String[] args) throws Exception {
// 下面是邮件要群发给的多个收件人地址
String[] to = {"Wei.Gan@163.com"};
// 创建Session对象
Properties props = new Properties();
/*
* mail.smtp.localhost属性用于设置SMTP协议的EHLO命令中的
* 主机名,其他SMTP服务器可能需要使用这个主机名确定发件SMTP 服务器的身份,这个信息可以从JavaMail的javadocs文档中的
* com.sun.mail.smtp包的帮助页面内查看到。
*/
props.setProperty("mail.smtp.localhost", "10.81.192.21");
Session session = Session.getInstance(props);
session.setDebug(true);
Message msg = createMessage(session);
for (int i = 0; i < to.length; i++) {
try {
sendMessage(session, msg, to[i]);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static Message createMessage(Session session) throws Exception {
String from = "Nan.Chen@163.com";// 发件人地址
String subject = "SMTPSender demo";// 邮件主题
String body = "This is a Lotus Notes Test...";// 邮件内容
// 创建代表邮件的MimeMessage对象,不包含收件人地址
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
msg.setSentDate(new Date());
msg.setSubject(subject);
msg.setText(body);
return msg;
}
public static void sendMessage(Session session, Message msg, String to)
throws Exception {
// 设置邮件内容的收件人并生成邮件消息内容
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
msg.saveChanges();
// 连接收件人地址所在的SMTP服务器并发送邮件
Transport transport = session.getTransport("smtp");
String domain = to.substring(to.indexOf("@") + 1);
String smtpServer = getSmtpServer(domain, null);
transport.connect(smtpServer, null, null);
transport.sendMessage(msg, msg.getRecipients(Message.RecipientType.TO));
transport.close();
}
public static String getSmtpServer(String domain, String dnsServer)
throws Exception {
DirContext ctx = new InitialDirContext();
Attributes attrsMx = null;
if (dnsServer != null) {
attrsMx = ctx.getAttributes("dns:" + "//" + dnsServer + "/"
+ domain, new String[] { "MX" });
} else {
attrsMx = ctx.getAttributes("dns:" + "/" + domain,
new String[] { "MX" });
}
String recordMx = (String) attrsMx.get("MX").get();
String smtpServer = recordMx.substring(recordMx.indexOf(" ") + 1);
return smtpServer;
}
}
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import java.util.Properties;
import java.util.Date;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.Message;
import javax.mail.internet.MimeMessage;
public class SMTPSender {
public static void main(String[] args) throws Exception {
// 下面是邮件要群发给的多个收件人地址
String[] to = {"Wei.Gan@163.com"};
// 创建Session对象
Properties props = new Properties();
/*
* mail.smtp.localhost属性用于设置SMTP协议的EHLO命令中的
* 主机名,其他SMTP服务器可能需要使用这个主机名确定发件SMTP 服务器的身份,这个信息可以从JavaMail的javadocs文档中的
* com.sun.mail.smtp包的帮助页面内查看到。
*/
props.setProperty("mail.smtp.localhost", "10.81.192.21");
Session session = Session.getInstance(props);
session.setDebug(true);
Message msg = createMessage(session);
for (int i = 0; i < to.length; i++) {
try {
sendMessage(session, msg, to[i]);
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static Message createMessage(Session session) throws Exception {
String from = "Nan.Chen@163.com";// 发件人地址
String subject = "SMTPSender demo";// 邮件主题
String body = "This is a Lotus Notes Test...";// 邮件内容
// 创建代表邮件的MimeMessage对象,不包含收件人地址
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
msg.setSentDate(new Date());
msg.setSubject(subject);
msg.setText(body);
return msg;
}
public static void sendMessage(Session session, Message msg, String to)
throws Exception {
// 设置邮件内容的收件人并生成邮件消息内容
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to));
msg.saveChanges();
// 连接收件人地址所在的SMTP服务器并发送邮件
Transport transport = session.getTransport("smtp");
String domain = to.substring(to.indexOf("@") + 1);
String smtpServer = getSmtpServer(domain, null);
transport.connect(smtpServer, null, null);
transport.sendMessage(msg, msg.getRecipients(Message.RecipientType.TO));
transport.close();
}
public static String getSmtpServer(String domain, String dnsServer)
throws Exception {
DirContext ctx = new InitialDirContext();
Attributes attrsMx = null;
if (dnsServer != null) {
attrsMx = ctx.getAttributes("dns:" + "//" + dnsServer + "/"
+ domain, new String[] { "MX" });
} else {
attrsMx = ctx.getAttributes("dns:" + "/" + domain,
new String[] { "MX" });
}
String recordMx = (String) attrsMx.get("MX").get();
String smtpServer = recordMx.substring(recordMx.indexOf(" ") + 1);
return smtpServer;
}
}
相关文章推荐
- java通过SMTP发送QQ邮件的完全步骤
- 使用java通过smtp完成发送邮件源码
- java实现smtp邮件发送
- java smtp 发送邮件的例子
- java实现基于SMTP发送邮件的方法
- JAVA实现SMTP邮件发送
- 用Java发送邮件 smtp验证码问题
- java实现基于SMTP发送邮件的方法
- java通过SMTP发送QQ邮件的完全步骤
- javaMail SMTPSendFailedException: java邮件发送常见的异常类型
- Java实现基于SMTP发送邮件的工具类
- java通过SMTP发送QQ邮件的完全步骤
- java spring 开启SMTP服务发送QQ邮件
- java网络编程三:基于SMTP的邮件发送客户端
- Java实现通过smtp服务器向指定邮箱发送邮件
- JAVA-SMTP发送邮件
- java smtp.sina.com发送邮件解决及编码修正!
- java smtp 邮箱向外部发送邮件 550 5.7.1 Unable to relay
- java发送邮件(javaMail通过SMTP发送邮件)
- java网络编程三:基于SMTP的邮件发送客户端