javamail实现发送邮件

来源:互联网 发布:出租车gps数据 编辑:程序博客网 时间:2024/06/06 02:48
今天写了邮件相关的api,小小的总结一下。先来了解一下邮件发送的过程,一封邮件发出,先发送到你的邮件服务器上,由你的邮件服务器发送到目标邮件服务器,再由目标邮件服务器转发到目标地址,区别于点对点传输。
javamail封装了邮件操作的基本类,利用javamail来实现邮件发送,要先下载mail.jar包,加到项目中,jdk版本要在1.6及以上。下面例子结合了struts框架,来看下例子:
public String sendMail() {//发送邮件(action中的方法)
  try{
    ActionContext actionContext = ActionContext.getContext();
    Map<String, Object> session = actionContext.getSession();
    Mail umail=(Mail) session.get("user");
    Authenticator auth = new SmtpAuthenticator( umail.getUsername(), umail.getPassword());
    Properties mailProps = new Properties();
    //用户校验
    mailProps.put("mail.smtp.auth", "true");
    //启用ssl
    mailProps.put("mail.smtp.ssl.enable", "true");
    //设置端口号
    mailProps.put("mail.smtp.port", "465");
    //不做服务器证书校验
    mailProps.put("mail.smtp.ssl.checkserveridentity", "false");
    //设置信任的地址
    mailProps.put("mail.smtp.ssl.trust", mail.getSmtp_server());
    //账户名
    mailProps.put("username", umail.getUsername());
    //密码
    mailProps.put("password",umail.getPassword());
    //邮件服务器主机
    mailProps.put("mail.smtp.host", mail.getSmtp_server());
    //获取session连接
    Session mailSession = Session.getDefaultInstance(mailProps, auth);
    //开启debug方便查错
    mailSession.setDebug(true);
    MimeMessage message = new MimeMessage(mailSession);
    //发件人地址
    message.setFrom(new InternetAddress(umail.getUsername()));
    //收件人地址
    String tt=mail.getTo_mail_address();
    if(tt!=null&&!tt.equals("")){
      String str[]=mail.getTo_mail_address().split("\\;");
      Address address [] =new InternetAddress[str.length];
      for(int i=0;i<str.length;i++){
        address[i]=new InternetAddress(str[i]);
      }
      message.setRecipients(Message.RecipientType.TO,address);
    }
    //抄送人地址
    String cc=mail.getCc_mail_address();
    if(cc!=null&&!cc.equals("")){
      String str1[]=mail.getCc_mail_address().split("\\;");
      Address address1 [] =new InternetAddress[str1.length];
      for(int i=0;i<str1.length;i++){
        address1[i]=new InternetAddress(str1[i]);
      }
      message.setRecipients(Message.RecipientType.CC,address1);
    }
    //添加标题
    message.setSubject(mail.getTitle());
    //添加邮件内容
    MimeMultipart multi = new MimeMultipart();
    BodyPart textBodyPart = new MimeBodyPart();
    textBodyPart.setText(mail.getContext());
    multi.addBodyPart(textBodyPart);
    if(mail.getAttachment()!=null){
      //添加附件
      BodyPart messageBodyPart= new MimeBodyPart();
      FileDataSource source = new FileDataSource(mail.getAttachment());
      //添加附件的内容
      messageBodyPart.setDataHandler(new DataHandler(source));
      //解决标题乱码
      messageBodyPart.setFileName(MimeUtility.encodeText(mail.getAttachmentFileName()));
      multi.addBodyPart(messageBodyPart);
      }
    message.setContent(multi);
    message.saveChanges();
    Transport.send(message);
  }catch (Exception ex) {
    System.err.println("邮件发送失败:" + ex.getMessage());
    System.err.println("错误原因:");
    ex.printStackTrace(System.err);
  }
}
public class Mail {//操作类
  private String username;//账户名
  private String password;//密码
  private String smtp_server="mail.myhexin.com";//主机
  private String to_mail_address;//收件地址
  private String cc_mail_address;//抄送地址
  private File attachment;//附件文件
  private String title;//主题
  private String context;//内容
  private String attachmentContentType; // 文件的内容类型
  private String attachmentFileName; // 上传文件名
    ..............//getter、setter函数
}
public class SmtpAuthenticator extends Authenticator {//用户验证
  private String username;
  private String password;
  public SmtpAuthenticator(String username, String password) {
    this.username = username;
    this.password = password;
  }
  public PasswordAuthentication getPasswordAuthentication() {
    return new PasswordAuthentication(this.username, this.password);
  }
}

<action name="sendmail" class="com.myhexin.action.MailTest" method="sendMail">
  <interceptor-ref name="fileUpload">
    <!-- 可以支持上传的文件类型 -->
    <param name="allowedTypes">
      text/plain<!--application/pdf image/jpg,image/jpeg,image/pjpegapplication/msword  -->
    </param>
    <!-- 设置上传文件的大小不能超过1M -->
    <param name="maximumSize">1024*1024</param>
  </interceptor-ref>
  <!-- 必须配置系统默认的拦截器 -->
  <interceptor-ref name="defaultStack" />
  <result name="success">success.jsp</result>
</action>
这个例子是由前端发送请求发送邮件,实际应用中最好封装成工具类,有需要时直接调用最好。
0 0
原创粉丝点击