您的位置:首页 > 编程语言 > Java开发

【利用javamail和POP3、SMPT协议实现邮件的收发】

2013-08-13 09:42 519 查看
一、简介

  SMTP 的全称是"Simple Mail Transfer Protocol",即简单邮件传输协议,用于邮件发送。SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP
服务器。

  POP3(Post Office Protocol 3)协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的 .

  而IMAP(Internet Mail Access Protocol)提供webmail 与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。

  同时,IMAP像POP3那样提供了方便的邮件下载服务,让用户能进行离线阅读。IMAP提供的摘要浏览功能可以让你在阅读完所有的邮件到达时间、主题、发件人、大小等信息后才作出是否下载的决定。此外,IMAP 更好地支持了从多个不同设备中随时访问新邮件。

  总之,IMAP 整体上为用户带来更为便捷和可靠的体验。POP3 更易丢失邮件或多次下载相同的邮件,但 IMAP 通过邮件客户端与webmail 之间的双向同步功能很好地避免了这些问题。

  注:若在web邮箱中设置了"保存到已发送",使用客户端POP服务发信时,已发邮件也会自动同步到网页端"已发送"文件夹内

  二、利用SMTP协议发送邮件

  package com.like.email;

  import java.io.File;

  import java.io.UnsupportedEncodingException;

  import java.util.ArrayList;

  import java.util.Properties;

  import javax.activation.DataHandler;

  import javax.activation.DataSource;

  import javax.activation.FileDataSource;

  import javax.mail.Authenticator;

  import javax.mail.BodyPart;

  import javax.mail.Message;

  import javax.mail.MessagingException;

  import javax.mail.Multipart;

  import javax.mail.Session;

  import javax.mail.Transport;

  import javax.mail.internet.AddressException;

  import javax.mail.internet.InternetAddress;

  import javax.mail.internet.MimeBodyPart;

  import javax.mail.internet.MimeMessage;

  import javax.mail.internet.MimeMultipart;

  /**

  * @author like

  * @E-mail kelee1987@hotmail.com

  * @CreateTime 2012-10-26 下午2:19:11

  */

  public class SMTPSendTest {

  private static final int RECEIPT = 1;

  private static final String attachmentDir = "";

  public static void sendEmail(Email emailInfo) throws UnsupportedEncodingException, MessagingException {

  Properties props = new Properties();

  props.put("mail.smtp.host", emailInfo.getSmtpServer());

  props.put("mail.smtp.port", emailInfo.getSmtpPort());

  props.put("mail.smtp.auth", "true");

  Authenticator auth = new SMTPAuthenticator(emailInfo.getUsername(), emailInfo.getPassword());

  Session session = Session.getInstance(props, auth);

  session.setDebug(false);

  Message msg = new MimeMessage(session);

  msg.setFrom(new InternetAddress(emailInfo.getFrom(), emailInfo.getFromName()));

  msg.setRecipients(Message.RecipientType.TO, getEmailRecipient(emailInfo.getTO()));

  msg.setRecipients(Message.RecipientType.CC, getEmailRecipient(emailInfo.getCC()));

  msg.setRecipients(Message.RecipientType.BCC, getEmailRecipient(emailInfo.getBCC()));

  if (emailInfo.getReceipt() == RECEIPT) {

  msg.setHeader("Disposition-Notification-To", emailInfo.getFrom());

  }

  msg.setSubject(emailInfo.getSubject());

  // 设置邮件内容(包括附件的HTML格式内容)

  msg.setContent(getMultipart(emailInfo.getContent(), attachmentDir, emailInfo.getAttachment()));

  msg.saveChanges();

  Transport.send(msg);

  }

  /**

  * 封装邮件地址

  *

  * @param address

  * @return

  * @throws AddressException

  */

  private static InternetAddress[] getEmailRecipient(ArrayList<String> address) throws AddressException {

  int toLen = 0;

  if (address != null) {

  toLen = address.size();

  }

  InternetAddress[] addressTo = new InternetAddress[toLen];

  if (toLen != 0) {

  String m_st_email = "";

  for (int i = 0; i < toLen; i++) {

  m_st_email = (String) address.get(i);

  if (m_st_email != null)

  addressTo[i] = new InternetAddress(m_st_email.trim());

  }

  }

  return addressTo;

  }

  private static Multipart getMultipart(String text, String attachParentDir, ArrayList<String> attachment) throws MessagingException {

更多精彩教程请关注:windows xp系统下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: