以下这段代码可以成功的从网易163的邮箱发给网易163,
可是我试了试gmail发给gmail就不行,yahoo,hotmail等等我估计也不行,我现在初步认定是这些邮箱需要进一步的账号验证,而163对这方面的验证可能松了些.
大家可以根据我给的代码中给出的debug调试信息帮我确定一下错误的原因.现征求以下网站可以互相发邮件的代码(互相发就是163发给163,gmail发给gmail):@sina.com
@hotmail.com
@yahoo.com
@yahoo.cn
@yahoo.com.cn
@gmail.com
@live.com
@live.cn
@msn.com只要能给出一个网站的邮箱互发代码就可以给分,越多则分给的越多.import java.util.Properties;import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;public class SenderWithSMTPVer {
String host;
String user;
String password; public void setHost(String host) {
this.host = host;
} public void setAccount(String user, String password) {
this.user = user;
this.password = password;
} public void send(String from, String to, String subject, String content) {
Properties props = new Properties();
props.put("mail.smtp.host", host);// 指定SMTP服务器
props.put("mail.smtp.auth", "true");// 指定是否需要SMTP验证
try {
Session mailSession = Session.getDefaultInstance(props);                        // 是否在控制台显示debug信息
mailSession.setDebug(true); Message message = new MimeMessage(mailSession);
message.setFrom(new InternetAddress(from));// 发件人
message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));// 收件人
sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
message.setSubject("=?UTF-8?B?" + enc.encode(subject.getBytes()) + "?=");
message.setSubject(subject);// 邮件主题
message.setText(content);// 邮件内容
message.saveChanges();
Transport transport = mailSession.getTransport("smtp");
transport.connect(host, user, password);
transport.sendMessage(message, message.getAllRecipients());
transport.close();
} catch (Exception e) {
System.out.println(e);
}
} public static void main(String args[]) {
SenderWithSMTPVer sm = new SenderWithSMTPVer();
sm.setHost("smtp.163.com");// 指定要使用的邮件服务器
sm.setAccount("test", "11111111");// 指定帐号和密码
/*
 * @param String 发件人的地址 @param String 收件人地址 @param String 邮件标题 @param
 * String 邮件正文
 */
sm.send("[email protected]", "[email protected]", "theTitle", "theContent");
}
}

解决方案 »

  1.   

    sina的肯定没问题,我用过多次了。http://code.java2000.net/p177和你的应该没有啥本质区别,你自己参考吧!
      

  2.   

    主要还是SMTP服务器的问题看SMTP服务器是否有服务器认证和怎么认证的?
    你改一下就行了,让他们的服务器认识
      

  3.   

    你写的有问题!sm.setHost("smtp.163.com");// 指定要使用的邮件服务器 这里的发送邮件的stmp协议地址有些不一样!你需要查看下!
      

  4.   

    javax.mail.SendFailedException: Sending failed;
      nested exception is: 
            javax.mail.MessagingException: 553 this mail is rejected by antispam system, [email protected]&date=2008090809
      

  5.   

    1.有很多公共邮件系统是不对用户开放SMTP的,你保能从WEB提交内容然后邮它的程序来连结SMTP,这就是所谓的WEBMAIL.
    2.有些邮箱使用imap,或exch,也不支持smtp.
    另外关于认证,任何SMTP服务器,只要发往本域就不需要认证,认证本身不可能通过不过,但它们会反解你是不是一个smtp服务器.比如from:<my.com>
    那么接收的服务器会看一下你的ip在不在my.com的x记录的ip列表中,这样来防止垃圾邮件.
    如果你登录是本域服务器,如果通过认证,就可以向其它域发信.
    简单说,如果你要连接 smtp.163.com这个地址,发信的目标也是smtp.163.com,那是不需要认证的,但有可能会反解你连结的来源.
    而你连结到smtp.163.com上向其它地址发信,那就只有通过认证才能发.
    在internet出现之前,你可以连结任何一台smtp服务器不需要
    认证向其它域发信,因为那时用电子邮件的都是"业类人士",大家都互相信任.后来出现了internet,我163的服务器凭什么要为你发送给
    其它域的信呢?只有你是我的用户,我才帮助你发送,所以要认证.