Transport transport = session.getTransport("smtp");transport.connect(host, username, password);

解决方案 »

  1.   

    我把代码放上:我把代码放上:package sendmail;
    import java.io.*;
    import java.util.*;
    import javax.mail.*;
    import javax.mail.internet.*;
    import javax.activation.*;public class Sendmailbean 
    { private MimeMessage mimeMsg;   private Session session;      
     private Properties props;     
     private boolean needAuth = false;   private String username = ""; 
     private String password = ""; private Multipart mp;    
     
     private SendAuth sendauth;
     public Sendmailbean() {
       setSmtpHost(SMTPHOST); //SMTPHOST 是发送邮件服务器的IP
       createMimeMessage();
     } public Sendmailbean(String smtp){
       setSmtpHost(smtp);
       createMimeMessage();
     } public void setSmtpHost(String hostName) {
       System.out.println("mail.smtp.host = "+hostName);
       if(props == null)props = System.getProperties();         
       props.put("mail.smtp.host",hostName);                
     } public boolean createMimeMessage()
     {
       try{
         session = Session.getDefaultInstance(props,null);   
       }
       catch(Exception e){
         System.err.println("Create "+e);
         return false;
       }
       
       try{
         mimeMsg = new MimeMessage(session);                 
         mp = new MimeMultipart();     return true;
       }
       catch(Exception e){
         System.err.println("Create "+e);
         return false;
       }
     } public void setNeedAuth(boolean need) {
       System.out.println("mail.smtp.auth = "+need);
       if(props == null)props = System.getProperties();   if(need){
         props.put("mail.smtp.auth","true");
       }else{
         props.put("mail.smtp.auth","false");
       }
     } public void setNamePass(String name,String pass) {
       username = name;
       password = pass;
     } public boolean setSubject(String mailSubject) {
       
       try{
         mimeMsg.setSubject(mailSubject);
         return true;
       }
       catch(Exception e) {
         System.err.println("Subject "+e);
         return false;
       }
     } public boolean setBody(String mailBody) {
       try{
         BodyPart bp = new MimeBodyPart();     
         bp.setContent(mailBody,"text/plain;charset=GB2312");
         mp.addBodyPart(bp);     return true;
       }
       catch(Exception e){
         System.err.println("Body "+e);
         return false;
       }
     } public boolean addFileAffix(String filename) {
       try{
         System.out.println(filename);
         BodyPart bp = new MimeBodyPart();
         FileDataSource fileds = new FileDataSource(filename);
         bp.setDataHandler(new DataHandler(fileds));
         bp.setFileName(fileds.getName());     mp.addBodyPart(bp);     return true;
       }
       catch(Exception e){
         System.err.println("File "+filename+" "+e);
         return false;
       }
     } public boolean setFrom(String from) {
       
       try{
         System.out.println("From "+from);
         mimeMsg.setFrom(new InternetAddress(from));          
         return true;
       }
       catch(Exception e)
       { return false; }
     } public boolean setTo(String to){
       if(to == null)return false;   try{
         System.out.println("To "+to);
         mimeMsg.setRecipients(Message.RecipientType.TO,InternetAddress.parse(to));
         return true;
       }
       catch(Exception e)
       {   return false;   } } public boolean setCopyTo(String copyto)
     {
       if(copyto == null)return false;
       try{
         System.out.println("CopyTo"+copyto);
         mimeMsg.setRecipients(Message.RecipientType.CC,(Address[])InternetAddress.parse(copyto));
         return true;
       }
       catch(Exception e)
       { return false; }
     } public String sendout()
     {
       String ee="";
       try{
         mimeMsg.setContent(mp);
         mimeMsg.saveChanges();
         
         sendauth=new SendAuth(username,password);          
         ee+="Sendbegin....";
         
         Session mailSession = Session.getInstance(props,(Authenticator)sendauth);
         ee+="Auth....";
         
         Transport transport = mailSession.getTransport("smtp");     
         ee+="Smtp...."; 
         
         transport.connect((String)props.get("mail.smtp.host"),username,password);
         ee+="Connect....";
         
         transport.sendMessage(mimeMsg,mimeMsg.getRecipients(Message.RecipientType.TO));
         ee+="Send....";
         
         ee+="OK!";
         transport.close();     return "OK!";
       }
       catch(Exception e)
       {     
         ee+=e.toString();
         return ee;
       }
     }
     
     public static void main(String[] args) {   String mailbody = "Hehe";   Sendmailbean themail = new Sendmailbean();
       themail.setNeedAuth(true);   
       themail.setNamePass(NAME,PASS);//NAME,PASS 为发送邮件服务器的认证用户名和密码   if(themail.setSubject("test") == false) return;
       if(themail.setBody(mailbody) == false) return;
       if(themail.setTo("[email protected]") == false) return;     
       //if(themail.setFrom("hehe") == false) return;
       //if(themail.addFileAffix("c:\\boot.ini") == false) return;
          themail.sendout();    
     }
    }
      

  2.   

    问题:
    这个程序在 window 下使用 java Sendmailbean 可以发送邮件;
    将 main() 中的代码加在 jsp 中也可以通过页面发送邮件。
    但是在 linux 下,通过 linux 命令也能发送邮件;将 main() 中的代码加在 jsp 中就不能发送邮件了!!!
    jsp 在执行
    Transport transport = mailSession.getTransport("smtp");
    时抛出异常:
    javax.mail.NoSuchProviderException: smtp 大家看看,顶顶吧。多谢!
      

  3.   

    是classpath的问题
    javaMail.jar 里有个文件javamail.default.providers,这里面有缺省的的设置,具体含义清参照文档我估计可能你的classpath里有其他的类似javamail.providers这样的文件,