package com.yourcompany.struts.dao;import java.util.Date;
import java.util.Properties;import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class Email {
// 发送邮件
public void send() {
String from = "[email protected]";
String to = "[email protected]";
String subject = "这是个测试邮件";
String content = "这是邮件内容";
String password = "zb_19871217";
String path = "";//s.getAdjunct();
try {
String mailserver ="smtp."+to.substring(to.indexOf('@')+1,to.length()); //在Internet上发送邮件时的代码
//String mailserver = "wanggh"; //在局域网内发送邮件时的代码
//String mailserver ="smtp.163.com";
Properties prop = new Properties();
prop.put("mail.smtp.host", mailserver);
prop.put("mail.smtp.auth", "true");
Session sess = Session.getDefaultInstance(prop);
sess.setDebug(true);
MimeMessage message = new MimeMessage(sess);
message.setFrom(new InternetAddress(from)); // 给消息对象设置发件人
//设置收件人
String toArr[]=to.split(",");
InternetAddress[] to_mail=new InternetAddress[toArr.length];
for(int i=0;i<toArr.length;i++){
to_mail[i]=new InternetAddress(toArr[i]);
}
    message.setRecipients(Message.RecipientType.BCC,to_mail);
//设置主题
message.setSubject(subject);
Multipart mul = new MimeMultipart(); // 新建一个MimeMultipart对象来存放多个BodyPart对象
BodyPart mdp = new MimeBodyPart(); // 新建一个存放信件内容的BodyPart对象
mdp.setContent(content, "text/html;charset=gb2312");
mul.addBodyPart(mdp); // 将含有信件内容的BodyPart加入到MimeMulitipart对象中
if(!path.equals("") && path!=null){ //当存在附件时
// 设置信件的附件(用本机上的文件作为附件)
mdp = new MimeBodyPart(); // 新建一个存放附件的BodyPart
String adjunctname = new String(path.getBytes("GBK"), "ISO-8859-1"); // 此处需要转码,否则附件中包括中文时,将产生乱码
path = (System.getProperty("java.io.tmpdir") + "/" + path).replace(
"\\", "/");
System.out.println("路径:" + path);
FileDataSource fds = new FileDataSource(path);
DataHandler handler = new DataHandler(fds);
mdp.setFileName(adjunctname);
mdp.setDataHandler(handler);
mul.addBodyPart(mdp);
}
message.setContent(mul); // 把mul作为消息对象的内容
message.saveChanges();
message.setSentDate(new Date());
// message.addRecipients(javax.mail.Message.RecipientType.TO,
// to);
Transport transport = sess.getTransport("smtp");
// 以smtp方式登录邮箱,第1个参数是发送邮件用的邮件服务器SMTP地址,第2个参数为用户名,第3个参数为密码
transport.connect(mailserver, from, password);

transport.sendMessage(message, message.getAllRecipients());
transport.close();
} catch (Exception e) {
System.out.println("发送邮件产生的错误:" + e.getMessage());
e.printStackTrace();
}
}
// public static void send(   
//  String to,/* 收信人地址 */ String toName,//收信人姓名   
//  String subject, /* 主题 */  
//  String body /* 内容 */  
//  ) {   
//   try {   
//    HtmlEmail email = new HtmlEmail();   
//    email.setHostName("smtp.163.com");//设置发信的smtp服务器   
//    email.addTo(to, toName);//设置收件人帐号和收件人   
//    email.setFrom("[email protected]", "aaa");//设置发信的邮件帐号和发信人   
//    email.setSubject(subject);//设置邮件主题   
//    email.setAuthentication("aaa","111111");//如果smtp服务器需要认证的话,在这里设置帐号、密码   
//    email.setHtmlMsg(body,"text/html; charset=GB2312");//设置邮件正文和字符编码   
//    email.send();   
//   } catch (EmailException e) {   
//    e.printStackTrace();   
//   }    

public static void main(String[] args) {
new Email().send();
}
}

解决方案 »

  1.   

    下面是后台信息,不知道什么错DEBUG: setDebug: JavaMail version 1.3.1
    DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
    DEBUG SMTP: useEhlo true, useAuth true
    DEBUG SMTP: trying to connect to host "smtp.163.com", port 25220 163.com Anti-spam GT for Coremail System (163com[20081010])
    DEBUG SMTP: connected to host "smtp.163.com", port: 25EHLO zh-b
    250-mail
    250-PIPELINING
    250-AUTH LOGIN PLAIN
    250-AUTH=LOGIN PLAIN
    250-coremail 1U702Iq1cx7no18twnFpTcGKas0Po18ZrZFpTcJGryayTZAdr43WS9vJo18ZrXCPTuFA-sKBj8Cz28x1UUUUU7Ic2I0Y2Ur843xiUCa0xDrUUUUj
    250 8BITMIME
    DEBUG SMTP: Found extension "PIPELINING", arg ""
    DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
    DEBUG SMTP: Found extension "AUTH=LOGIN", arg "PLAIN"
    DEBUG SMTP: Found extension "coremail", arg "1U702Iq1cx7no18twnFpTcGKas0Po18ZrZFpTcJGryayTZAdr43WS9vJo18ZrXCPTuFA-sKBj8Cz28x1UUUUU7Ic2I0Y2Ur843xiUCa0xDrUUUUj"
    DEBUG SMTP: Found extension "8BITMIME", arg ""
    DEBUG SMTP: Attempt to authenticate
    AUTH LOGIN
    334 dXNlcm5hbWU6
    NTY4NjYyMzQ4QHFxLmNvbQ==
    334 UGFzc3dvcmQ6
    emJfMTk4NzEyMTc=
    535 Error: authentication failed
    发送邮件产生的错误:null
    javax.mail.AuthenticationFailedException
    at javax.mail.Service.connect(Service.java:264)
    at javax.mail.Service.connect(Service.java:134)
    at com.yourcompany.struts.dao.Email.send(Email.java:72)
    at com.yourcompany.struts.dao.Email.main(Email.java:100)
      

  2.   

    smtp.163.com好像不支持这种发送模式,你换其他的smtp服务器试一下我以前用 smtp.163.com 的时候,它是不支持的,不知道现在怎么样了 
      

  3.   

    能不能说的详细的,我以前没做过邮件发送,除了smtp服务器还有什么服务器啊,能不能列举一下
      

  4.   

    http://bxj.javaeye.com/blog/187736试一下这里面提到的邮件服务器,看能不能找到可用的