帮公司开发了一套360度调查系统,当中用到了Java mail发送邮件给用户。
   这里发现了一个问题,因为我用统一的SMTP服务器发送邮件,而我想每次发送邮件的时候发件人地址都不同,但是我发现无法通过验证,总是报错说发件人验证失败。
   我贴一段我自己写的简易代码,我想问一下如何伪装发件人,如何设置成不用验证发件人的,谢谢
  package mail;import org.springframework.mail.javamail.JavaMailSenderImpl;import org.springframework.mail.javamail.MimeMessageHelper;import javax.mail.internet.MimeMessage;import java.util.Properties;import java.util.Date;/*** @author levinhou*/public class SendMail {//邮件发送器public static String Sender(String subject, String msg, String sendTo, String fromMail, String user, String pw, String fromName, String protocol, String host, String port){try{final String username = user;final String pass = pw;//需要认证Properties props = new Properties();props.put("mail.smtp.host", host);props.put("mail.smtp.auth", "true");props.put("mail.transport.protocol", protocol);props.put("mail.from", fromMail);//创建发送器JavaMailSenderImpl sender = new JavaMailSenderImpl();sender.setHost(host);sender.setUsername(username);sender.setPassword(pass);//创建消息MimeMessage message = sender.createMimeMessage();message.addHeader("X-Mailer", "Java Mailer");MimeMessageHelper helper = new MimeMessageHelper(message);helper.setTo(sendTo);helper.setFrom(fromMail, fromName);helper.setSubject(subject);helper.setText(msg);helper.setSentDate(new Date());//开始发送sender.setJavaMailProperties(props);sender.send(message);}catch(Exception e){System.out.println("Error:" + e);return "Failure";}return "Success";}//测试public static void main(String args[])throws Exception{String subject = "测试邮件";//标题String sendTo = "[email protected]";//接收者邮件String fromMail = "[email protected]";//发送者邮件String user = "windhall";//发送者用户String pw = "xxxxxxxx";//发送者邮件密码String fromName = "Chen";//发送者名字String protocol = "smtp";//协议String host = "smtp.126.com";//发送主机String port = "25";//端口String msg = "简单邮件发送。";//发送内容String ret = Sender(subject, msg, sendTo, fromMail, user, pw, fromName, protocol, host, port);System.out.println("邮件发送结果:" + ret);}}代码里的收件人我乱填了一个,就无法通过验证~

解决方案 »

  1.   

    你写复杂了,以下是我的代码,发送人可任意填写.
    import java.net.InetAddress;
    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 SendMail {
        /**
         * 发送邮件测试
         */
        public static void main(String[] args) {
            try {
                // Get system properties
                Properties props = System.getProperties();
        
                // 设置smtp邮件服务器
                props.put("mail.smtp.host", "192.168.0.61");
                props.setProperty("mail.smtp.port", "25");
                props.put("mail.smtp.auth", false);
                
                // 取得连接
                Session session = Session.getDefaultInstance(props, null);
                Transport transport = session.getTransport("smtp");
                transport.connect();
        
                // 邮件定义
                MimeMessage mail = new MimeMessage(session);
                
                mail.addRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));
                mail.setSubject("邮件标题……");
                mail.setText("邮件正文……");
                mail.setFrom(new InternetAddress("[email protected]"));
                transport.sendMessage(mail, mail.getAllRecipients());
                   transport.close();
                
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    希望对你有所帮助,记得给分!
      

  2.   


    你这一段当中用的SMTP是自己搭建的吧
    公网提供的可以么?
      

  3.   

    驗不驗證是服務器説了算,你要用JAVAMAIL發郵件,必然是通過網絡中某台服務器代發,例如163,不驗證一定是不通過,要不就自己搭建郵件服務器,自己發
      

  4.   

    1楼估计是自己配置的smtp我之前也自己配了个。。发件人可任意指定LZ的应该不可以
      

  5.   

    适用于任何网络,关键在这句话:
    props.put("mail.smtp.auth", false);
    意思是不对发送者验证。
    其实你把你的props.put("mail.smtp.auth", "true");改为props.put("mail.smtp.auth", false);
    应该也就可以了