java程序发送邮件以及可能出现的问题

来源:互联网 发布:苹果mac怎么压缩文件 编辑:程序博客网 时间:2024/06/10 20:20


首先是代码的实现


第一种方式


import java.util.Date;
import java.util.Properties;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
  * 邮件发送工具类
  * @author xxxxx
  * @email xxxx@163.com
  * @date 2013-3-31 下午5:08:16
  * @version 1.0
  */
public class EmailTools {

  /**
    * 邮件发送的方法
    * @param to 收件人
    * @param subject 主题
    * @param content 内容
    * @return 成功或失败
    */
  public static boolean send(String to, String subject, String content){
 
   // 第一步:创建Session
   Properties props = new Properties();
   //指定邮件的传输协议,smtp(Simple Mail Transfer Protocol 简单的邮件传输协议)
   props.put("mail.transport.protocol", "smtp");
   //指定邮件服务器
   props.put("mail.host","smtp.126.com");
   //指定邮件的发送人(您用来发送邮件的服务器,比如您的163\sina等邮箱)
   props.put("mail.from", "xxxxxxxxxxxxx@126.com");
   Session session = Session.getDefaultInstance(props);
 
   // 开启调试模式
   session.setDebug(true);
   try {
    // 第二步:获取邮件发送对象
    Transport transport = session.getTransport();
    // 连接邮件服务器,链接您的163、sina邮箱,用户名(不带@163.com,登录邮箱的邮箱账号,不是邮箱地址)、密码
    transport.connect("lxxxxxxxxx", "orpwofqixxxxxxz");
  
    // 第三步:创建邮件消息体
    MimeMessage message = new MimeMessage(session);
    //邮件的主题
    message.setSubject(subject);                              
    //邮件的内容
    message.setContent(content, "text/html;charset=utf-8");       
    //邮件发送时间
    message.setSentDate(new Date());                           
  
    // 第四步:发送邮件
    //第一个参数:邮件的消息体
    //第二个参数:邮件的接收人,多个接收人用逗号隔开(test1@163.com,test2@sina.com)
    transport.sendMessage(message, InternetAddress.parse(to));
    return true;
   } catch (Exception e) {
    e.printStackTrace();
   }
   return false;
  }
  public static void main(String[] args) {
         //您要发送给谁,标题,内容
  EmailTools email = new EmailTools();
       boolean result = email.send("xxxxxxxx@qq.com", "你好", "你好你好你好你好你好你好你好你好");
       if(result){
        System.out.print("done");
       
       }
    }  
}





第二种方式


import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;


public class SendEmail {

 private static InternetAddress[] internetAddresses;
 public static void getInternetAddress(){

  String sendTo = "xxxxxxxx@qq.com";
  if (!"".equals(sendTo)) {
   String[] addresses = sendTo.split(";");
   internetAddresses = new InternetAddress[addresses.length];
   for (int i = 0; i < addresses.length; i++) {
    InternetAddress addr = null;
    try {
     addr = new InternetAddress(addresses[i]);
    } catch (AddressException e) {
     e.printStackTrace();
    }
    if (addr != null)
     internetAddresses[i] = addr;
   }
  }
 }
 
 public static void sendWarnEmails(String content) {

  getInternetAddress();
  System.out.print("\n*************\n");
  System.out.print(internetAddresses);
  System.out.print("\n*************\n");
  String title = "加油卡充值系统预警";
  Properties props = new Properties();
  props.put("mail.smtp.auth", "true");
//   props.put("mail.smtp.starttls.enable", "true");
  props.put("mail.smtp.host", "smtp.126.com");
  props.put("mail.smtp.port", "25");

  Session session = Session.getInstance(props, new javax.mail.Authenticator() {
   protected PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication("lxxxxxxxxxx@126.com", "orpwofqiiqlvxxz");
   }
  });

  try {

   Message message = new MimeMessage(session);
   message.setFrom(new InternetAddress("lxxxxxxxxxxx@126.com"));
   message.setRecipients(Message.RecipientType.TO, internetAddresses);
   message.setSubject(title);
   message.setText(content);

   System.out.print("\n*******1*******\n");
   Transport.send(message);
   System.out.print("\n*******2*******\n");
   System.out.println("Done");

  } catch (MessagingException e) {
   throw new RuntimeException(e);
  }
 }
 
 
 
 public static void main(String[] args) {
  // TODO Auto-generated method stub

  System.out.print("\n***************\n");
  SendEmail email = new SendEmail();
  email.sendWarnEmails("hello word");
 }

}




以上两种方式需要的jar包是mail-1.4.5.jar



可能存在的问题:在测试的时候如果输出栏中提示:javax.mail.AuthenticationFailedException: 535 Error: authentication failed

可能1:用户名称或者密码错误

可能2:指定的邮件服务器没写正确

可能3:你自己的发送邮箱没有给客户端授权(这个概率最大),这是你可以登陆网页邮箱,将自己的邮箱中客户端授权打开(这时要记住发给自己的客户端授权密码(这个只针对126邮箱,其他邮箱具体情况自己看着准备))并且记得开启SMTP,POP3,IMAP服务。这样再重新测试一次应该就可以成功了。






0 0
原创粉丝点击