各位,这两天折腾邮件功能,开始用main()函数发送邮件很正常,后来改成jsp调用函数发送邮件,就会报错:
com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM smtp2, DNGowKCr8YDUwq9M2JJYAw--.102S2 1286587092 http://mail.163.com/help/help_spam_16.htm?ip=115.173.8.15&hostid=smtp2&time=1286587092
如果我发送邮件的参数是前台传进去的,比如 收件人地址,内容之类的就会报错,如果是在程序里面写死的话就会正常发送,不知道哪个高人遇到过这样的问题,帮帮小弟.

解决方案 »

  1.   

    在main方法中可以执行,到jsp就不可以.其中原因应该是:
    jsp中传过来的值是Null,或者是出现乱码,编码问题.你不妨在输出看看结果!
      

  2.   

    和接沒接到傳來的值沒多打關係吧  就算是亂碼 NULL也可以傳輸的  程序沒錯 也可以發送成功的
    DEBUG看是哪出的問題的  把代碼貼出來看看
      

  3.   

    我刚刚做了一个mail发送的小程序.没问题 我希望你把代码贴出来 我们共同请教
      

  4.   

    谢谢大家,昨天忙别的去了,首先传进来的参数是正常的,我把传进来的参数值放到程序里面,就能发送.很奇怪的问题,我把程序贴出来,大家帮忙看看.import java.util.Properties; 
    import javax.mail.Authenticator; 
    import javax.mail.internet.InternetAddress; 
    import javax.mail.internet.MimeBodyPart; 
    import javax.mail.Multipart; 
    import javax.activation.FileDataSource; 
    import javax.mail.internet.MimeMultipart; 
    import javax.activation.DataHandler; 
    import javax.mail.internet.MimeUtility; 
    import java.util.Date; import org.apache.commons.lang.StringUtils;
    public class SandMailService {
    public static void main(String[] args){ 
    String title = "程序发送";//所发送邮件的标题 
    String from ="[email protected]";//从那里发送 
    String sendTo[] = {"[email protected]","[email protected]"};//发送到那里 
    //邮件的文本内容,可以包含html标记则显示为html页面 
    String content = "内容<IMG src='G:\\pics\\2313552.jpg'>"; 
    //所包含的附件,及附件的重新命名 
    String fileNames[] = {"G:\\pics\\imgapp.jpg,imgapp.jpg","G:\\pics\\pic\\2007512233834822.jpg,2007512233834822.jpg"}; 

    try { 
    // MailSender mailsender = new MailSender(); 
    sanMail(title, from, sendTo, content, fileNames,"text/html;charset=gb2312"); 
    } catch (Exception ex) { ex.printStackTrace(); } 
    }
    public static void sendMail(String subject, String from, String[] to, String text, String[] filenames,String mimeType)throws Exception{
     
    //ResourceBundle mailProps = ResourceBundle.getBundle("mail"); 可以从配置文件读取相应的参数 
    Properties props = new Properties();  String smtp = "smtp.163.com"; //设置发送邮件所用到的smtp 
    String servername = "username"; //用户名
    String serverpaswd = "psd"; //密码 javax.mail.Session mailSession; //邮件会话对象 
    javax.mail.internet.MimeMessage mimeMsg; //MIME邮件对象  props = java.lang.System.getProperties(); //获得系统属性对象 
    props.put("mail.smtp.host", smtp); //设置SMTP主机 
    props.put("mail.smtp.auth", "true"); //是否到服务器用户名和密码验证 
    //到服务器验证发送的用户名和密码是否正确 
    EmailAutherticatorbean myEmailAuther = new EmailAutherticatorbean(servername, serverpaswd); 
    //设置邮件会话 
    mailSession = javax.mail.Session.getInstance(props, (Authenticator) myEmailAuther); 
    //设置传输协议 
    javax.mail.Transport transport = mailSession.getTransport("smtp"); 
    //设置from、to等信息 
    mimeMsg = new javax.mail.internet.MimeMessage(mailSession); 
    if (!StringUtils.isEmpty(from)) 

    InternetAddress sentFrom = new InternetAddress(from); 
    mimeMsg.setFrom(sentFrom); //设置发送人地址 
    }  InternetAddress[] sendTo = new InternetAddress[to.length]; 
    for (int i = 0; i < to.length; i++) 

    System.out.println("发送到:" + to[i]); 
    sendTo[i] = new InternetAddress(to[i]); 
    }  mimeMsg.setRecipients(javax.mail.internet.MimeMessage.RecipientType.BCC, sendTo); 
    mimeMsg.setSubject(subject, "gb2312");  MimeBodyPart messageBodyPart1 = new MimeBodyPart(); 
    //messageBodyPart.setText(UnicodeToChinese(text)); 
    messageBodyPart1.setContent(text, mimeType);  Multipart multipart = new MimeMultipart();//附件传输格式 
    multipart.addBodyPart(messageBodyPart1);  for (int i = 0; i < filenames.length; i++) { 
    MimeBodyPart messageBodyPart2 = new MimeBodyPart(); 
    //选择出每一个附件名 
    String filename = filenames[i].split(",")[0]; 
    System.out.println("附件名:" + filename); 
    String displayname = filenames[i].split(",")[1]; 
    //得到数据源 
    FileDataSource fds = new FileDataSource(filename); 
    //得到附件本身并至入BodyPart 
    messageBodyPart2.setDataHandler(new DataHandler(fds)); 
    //得到文件名同样至入BodyPart 
    //messageBodyPart2.setFileName(displayname); 
    // messageBodyPart2.setFileName(fds.getName()); 
    messageBodyPart2.setFileName(MimeUtility.encodeText(displayname)); 
    multipart.addBodyPart(messageBodyPart2); 

    mimeMsg.setContent(multipart); 
    //设置信件头的发送日期 
    mimeMsg.setSentDate(new Date()); 
    mimeMsg.saveChanges(); 
    //发送邮件 
    transport.send(mimeMsg); 
    transport.close(); 

    }}
    //验证
    import javax.mail.Authenticator;
    import javax.mail.PasswordAuthentication; public class EmailAutherticatorbean extends Authenticator  { 
    private String m_username = null; 
    private String m_userpass = null;  public void setUsername(String username) 

    m_username = username; 
    }  public void setUserpass(String userpass) 

    m_userpass = userpass; 
    }  public EmailAutherticatorbean(String username, String userpass) 

    super(); 
    setUsername(username); 
    setUserpass(userpass);  } 
    public PasswordAuthentication getPasswordAuthentication() 
    {  return new PasswordAuthentication(m_username,m_userpass); 

    }这样就能正常发送,但是在jsp中调用sendMail()就会报错:
    com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM smtp2, DNGowKCr8YDUwq9M2JJYAw--.102S2 1286587092 http://mail.163.com/help/help_spam_16.htm?ip=115.173.8.15&hostid=smtp2&time=1286587092