近日在做一个网站,用到了企业邮箱,之前对邮件发送不太了解,本来有一个网站用的sogou免费企业邮箱,现在老板要用Hotmail无奈之好再来写个,由于Hotmail邮箱需要SSL验证,而sogou不需要,所以这点就比较麻烦。
刚开始没做过这样的东西,当然是没法下手,随而网上查了些资料写了个,经过一番苦战终于发出去了,测试了我的gmail邮箱收到了邮件,但是发现国内的比如QQ和126 之类收取邮件时候比较慢,gmail很快。顺便发了上来。
package com.wlw168.mail; import java.io.UnsupportedEncodingException; import java.util.Properties; import javax.mail.Authenticator; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.PasswordAuthentication; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeUtility; public class SendMail { public static void sendMail(String toEmail, String title, String content) { String host = "smtp.live.com"; // 指定的smtp服务器 String from = "XXX信息中心"; // 邮件标题 String to = "[email protected]"; // 邮件接收人的邮件地址 final String username = "[email protected]"; // 发件人的邮件帐户 final String password = "password"; // 发件人的邮件密码 // 创建Properties 对象 Properties props = System.getProperties(); // 添加smtp服务器属性 添加了SSL验证 props.put("mail.smtp.starttls.enable", "true"); props.put("mail.smtp.host", host); props.put("mail.smtp.user", from); props.put("mail.smtp.password", password); props.put("mail.smtp.port", "25"); // gmail smtp port 587 props.put("mail.smtp.auth", "true"); // 创建邮件会话 Session session = Session.getDefaultInstance(props,new Authenticator() { // 验账账户 public PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, password); }}); try { // 定义邮件信息 MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(MimeUtility.encodeText(from,"gb2312", "B")));//GB2312编码,防止接收后标题乱码 message.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); message.setSubject(title); message.setText(content); // 发送消息 // session.getTransport("smtp").send(message); //也可以这样创建Transport对象 Transport.send(message); } catch (MessagingException e) { e.printStackTrace(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args) { SendMail.sendMail("[email protected]", "测试", "发送成功"); } }
邮件地址,密码之类修改成你自己的,就可以发送了
做的过程中出现了好多问题
1、javax.mail.AuthenticationFailedException
这有可能是你的发送邮件的名字和密码不对,会出现这样的异常
第二种情况
javax.mail.MessagingException: Could not connect to SMTP host: smtdp.live.com, port: 25;
这是没有连接到邮箱SMTP服务器出现的问题,重点检查你的SMTP是否写对了。
第三种:
javax.mail.SendFailedException: Sending failed;
nested exception is:
class javax.mail.MessagingException: 530 5.7.0 Must issue a STARTTLS command first
at javax.mail.Transport.send0(Transport.java:218)
at javax.mail.Transport.send(Transport.java:80)
at com.wlw168.mail.SendMail.sendMail(SendMail.java:58)
at com.wlw168.mail.SendMail.main(SendMail.java:69)
这种就不好说了,我是用MyEclipse6.5开发的,这个可能是mail.jar 和activation.jar版本的问题,出这个问题是在J2EE1.4上面出的。如果用的是JAVAEE1.5的话,就需要删除JAVAEE.JAR里面的mail 和activation这两个文件夹里面的,这样后应该就没事了,不然的话也会出现版本不兼容的问题。JAVAEE.JAR这个JAR包是在MyEclipse的
D:\Program Files\MyEclipse 6.5M1 Blue\myeclipse\eclipse\plugins\com.genuitec.eclipse.j2eedt.core_6.4.100.zmyeclipse64100200805\data\libraryset\EE_5
这是我的路径找到后用解压缩WinRAR打开删除里面的mail 和activation文件夹,我当初是这样做删除后在本地测试通过。 但在J2EE1.4还是出现不兼容的情况,还没有解决