日期:2014-05-20  浏览次数:20653 次

javaMail 的setFrom()问题
最近在学习javaMail,可是有一个问题让我很是奇怪,message.setForm()方法里面的InternetAddress总是必须和我连接smtp服务器用的用户名要一样,不然就发送不出去,如果不设置message的setForm在Transport里面设置,或者setForm里面填写其他地址,邮件就都发送不出去,而且没有错误提示!
各位大侠可以指点我一下吗?
Java code

public static void main(String[] args) throws Exception {
        Properties props = new Properties();
        props.setProperty("mail.debug", "true"); //输出debug信息
        props.setProperty("mail.transport.protocol","smtp"); //协议
        props.setProperty("mail.auth", "true"); //用户验证
        Session session =Session.getInstance(props); // 创建Session
        
        String date = DateFormat.getTimeInstance().format(new Date(System.currentTimeMillis())); //区分标示作用
        
        Message message = new MimeMessage(session); // 创建邮件体
        message.setText("路遥知马力!"); //邮件内容:简单的
        message.setSubject("javaMial" + date ); //邮件主题
        message.setFrom(new InternetAddress("862123204@qq.com")); //发件人(这里好像要和connect()里面的user要相同???)
        
        Transport transport = session.getTransport(); //创建发送器
        transport.connect("smtp.qq.com", 25, "862123204", "password");  //连接smtp服务器,准备发送
        transport.sendMessage(message, new Address[]{new InternetAddress("studyjavaee@163.com"),new InternetAddress("zhanglelife@163.com")});
        
        transport.close(); //关闭资源
        



------解决方案--------------------
setFrom 是你用哪个邮箱发送的,smtp是你发送的邮箱的邮箱协议。。肯定要一样的阿。。
------解决方案--------------------
我记得是可以不一样,但是似乎是在smtp一样的情况下可以。
比如你是用smtp.163.com 的,你登录的时候是用wwww@163.com
但是你在setFrom时可以换成其他的163的邮箱(如kkk@163.com)
我记得以前试过,你试试看现在能不能行了