import java.util.*;
import javax.activation.*;
import javax.mail.*;
import javax.mail.internet.*;
    
/**
 * <p>Title: 简单的MailBean</p>
 * <p>Description: 提供简便的Mail发送功能(支持多附件及身份验证)</p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: </p>
 * @author diystar
 * @version 1.0
 */
public class SimpleMail
{
    private String sender = null;//发件人地址
    private String smtpHost = null;//邮件发送服务器(smtp)
    private String user = null;//登录用户名
    private String password = null;//登录密码
    
    private String receiver = null;//收件人地址
    private String copyReceiver = null;//抄送人地址
    private String hiddenReceiver = null;//暗送人地址
    
    private String subject = null;//mail主题
    private String content = null;//mail内容
    private String affixPath = null;//mail附件的路径
    
    /** 设置发件人地址 */
    public void setSender(String sender) {this.sender = sender;}
    public String getSender() {return sender;}
    
    /** 设置邮件发送服务器(smtp) */
    public void setSmtpHost(String smtpHost) {this.smtpHost = smtpHost;}
    public String getSmtpHost() {return smtpHost;}
    
    /** 设置登录用户名 */
    public void setUser(String user) {this.user = user;}
    public String getUser() {return user;}
    
    /** 设置登录密码 */
    public void setPassword(String password) {this.password = password;}
    public String getPassword() {return password;}
    
    /** 设置收件人地址 */
    public void setReceiver(String receiver) {this.receiver = receiver;}
    public String getReceiver() {return receiver;}
    
    /** 设置抄送人地址 */
    public void setCopyReceiver(String receiver) {this.copyReceiver = receiver;}
    public String getCopyReceiver() {return copyReceiver;}
    
    /** 设置暗送人地址 */
    public void setHiddenReceiver(String receiver) {this.hiddenReceiver = receiver;}
    public String getHiddenReceiver() {return hiddenReceiver;}
    
    /** 设置mail主题 */
    public void setSubject(String subject) {this.subject = subject;}
    public String getSubject() {return subject;}
    
    /** 设置mail内容 */
    public void setContent(String content) {this.content = content;}
    public String getContent() {return content;}
    
    /** 设置mail附件的路径 */
    public void setAffixPath(String affixPath) {this.affixPath = affixPath;}
    public String getAffixPath() {return affixPath;}
    
    /**
     * 使用smtp发送邮件
     * @throws MessagingException mail发送失败
     */
    public void smtp() throws MessagingException
    {
        if (smtpHost == null) throw new MessagingException("smtpHost not found");
        if (user == null) throw new MessagingException("user not found");
        if (password == null) throw new MessagingException("password not found");
        if (receiver == null && copyReceiver == null && hiddenReceiver == null)
            throw new MessagingException("receiver not found");
    
        Properties properties = new Properties();
        properties.put("mail.smtp.host", smtpHost);//设置smtp主机
        properties.put("mail.smtp.auth", "true");//使用smtp身份验证
    
        Session session = Session.getDefaultInstance(properties, new Authenticator()
        {
            public PasswordAuthentication getPasswordAuthentication()
            {
                return new PasswordAuthentication(user, password);
            }
        });//获得邮件会话对象
    
        MimeMessage mimeMsg = new MimeMessage(session);//创建MIME邮件对象
    
        if (sender != null)//设置发件人地址
            mimeMsg.setFrom(new InternetAddress(sender));
    
        if (receiver != null)//设置收件人地址
            mimeMsg.setRecipients(Message.RecipientType.TO, parse(receiver));
    
        if (copyReceiver != null)//设置抄送人地址
            mimeMsg.setRecipients(Message.RecipientType.CC, parse(copyReceiver));
    
        if (hiddenReceiver != null)//设置暗送人地址
            mimeMsg.setRecipients(Message.RecipientType.BCC, parse(hiddenReceiver));
    
        if (subject != null)//设置邮件主题
            mimeMsg.setSubject(subject, "UTF-8");
    
        MimeBodyPart part = new MimeBodyPart();//mail内容部分
        part.setText(content == null ? "" : content, "UTF-8");
    
        Multipart multipart = new MimeMultipart();
        multipart.addBodyPart(part);//在 Multipart 中增加mail内容部分
    
        if (affixPath != null)//mail附件部分
        {
            ArrayList parts = parsePath(affixPath);
            for (int i = 0; i < parts.size(); i ++)
            {
                multipart.addBodyPart( (MimeBodyPart) parts.get(i));
            }
        }
    
        mimeMsg.setContent(multipart);//增加 Multipart 到信息体
        mimeMsg.setSentDate(new Date());//设置发送日期        Transport.send(mimeMsg);//发送邮件
    }
    
    /** 解析地址集合字符串 */
    private InternetAddress[] parse(String addressSet) throws AddressException
    {
        ArrayList list = new ArrayList();        StringTokenizer tokens = new StringTokenizer(addressSet, ";");
        while (tokens.hasMoreTokens())
        {
            list.add(new InternetAddress(tokens.nextToken().trim()));
        }        InternetAddress[] addressArray = new InternetAddress[list.size()];
        list.toArray(addressArray);
        return addressArray;
    }
    
    /** 解析附件路径字符串 */
    private ArrayList parsePath(String affixPath) throws MessagingException
    {
        ArrayList list = new ArrayList();        StringTokenizer tokens = new StringTokenizer(affixPath, ";");
        while (tokens.hasMoreTokens())
        {
            MimeBodyPart part = new MimeBodyPart();
            FileDataSource source = new FileDataSource(tokens.nextToken().trim());
            part.setDataHandler(new DataHandler(source));
            part.setFileName(source.getName());
            list.add(part);
        }        return list;
    }}

解决方案 »

  1.   

    class  Email_Autherticator  extends  Authenticator
       {
                 public  Email_Autherticator()
                     {
                           super();
                     }
                 public  PasswordAuthentication  getPasswordAuthentication()
                     {
                             return  new  PasswordAuthentication("you mail","you pass");
                     }
       }
      

  2.   

    www203(水户洋平) :
    不成功,还是通不过验证。为什么???
      

  3.   

    真不知道为什么通不过sina.com.cn的验证
      

  4.   

    再加一句
    properties.put("mail.transport.protocol", "smtp");
      

  5.   

    看看我自己的吧,带smtp验证的
    其中
          String sSmtpServer 是说 smtpserver
          String sName 是说 用户名
          String sFrom 是说 发信人地址
          String sPwd 是说 口令
    改成自己的boolean sendMail( String to, String subject, String body )
      {//smtp Authenticate
           class  SmtpAuthenticator  extends  javax.mail.Authenticator
               {
                           String  usr=null;
                           String  pw=null;
                           public  SmtpAuthenticator(String  user,String  pass)
                           {
                                       this.usr  =  user;
                                       this.pw  =  pass;
                           }
                           protected  javax.mail.PasswordAuthentication  getPasswordAuthentication()
                                   {
                                           return  new  javax.mail.PasswordAuthentication(usr,  pw);
                                   }
               }
        if( to.length() == 0 ) return false;
        if( subject.length() == 0 ) return false;
        if( body.length() == 0 ) return false;
        try
        {
          SystemSetupMaster sysM=new SystemSetupMaster();
          String sSmtpServer = sysM.getSystem( "SmtpServer" );
          String sName = sysM.getSystem( "UserName" );
          String sFrom = sysM.getSystem( "MailFrom" );
          String sPwd = sysM.getSystem( "PassWord" );
          Transport  transport;
          Properties  props  =  System.getProperties();
          // -- Attaching to default Session, or we could start a new one --
          props.put(  "mail.smtp.auth",  "true");
          props.put("mail.smtp.host", sSmtpServer);
          SmtpAuthenticator  sa  =  new  SmtpAuthenticator(sName,sPwd);
          Session  sess=Session.getInstance(props,sa);
          sess.setDebug(false);
          // -- Create a new message --
          Message  msg=new  MimeMessage(sess);
          msg.setSentDate(new java.util.Date());
          // -- Set the FROM and TO fields --
          msg.setSentDate(new  Date());
          msg.setFrom(new  InternetAddress(sFrom));
          msg.setSubject(subject);
          msg.setRecipient(Message.RecipientType.TO,new  InternetAddress(to));
          //msg.setText(body);
          // -- Set some other header information --
          //msg.setHeader("X-Mailer", "Sendmail");
          msg.setContent(body,  "text/plain;charset=EUC-JP");
          // -- Send the message --
          transport=sess.getTransport(  "smtp" );
          transport.connect(sSmtpServer,sName,sPwd);
          transport.sendMessage(msg,msg.getAllRecipients());
          transport.close();      return true;
        }
        catch( Exception ex )
        {
          ex.printStackTrace();
          return false;
        }
       }
      

  6.   

    建议换个服务器我做asp.net的时候用163的就可以的