`

利用JavaMail收/发Gmail邮件(SSL)

    博客分类:
  • java
阅读更多

Gmail目前已经启用了POP3和SMTP服务,具体情况请看 http://www.javayou.com/showlog.jspe?log_id=490



与其他邮箱不同的是Gmail提供的POP3和SMTP是使用安全套接字层SSL的,因此常规的JavaMail程序是无法收发邮件的,下面是使用JavaMail如何收取Gmail邮件以及发送邮件的代码:




1. 邮件收取

Java代码 复制代码 收藏代码
  1. package lius.javamail.ssl;   
  2.   
  3. import java.io.UnsupportedEncodingException;   
  4. import java.security.*;   
  5. import java.util.Properties;   
  6. import javax.mail.*;   
  7. import javax.mail.internet.InternetAddress;   
  8. import javax.mail.internet.MimeUtility;   
  9.   
  10. /**  
  11.  * 用于收取Gmail邮件  
  12.  * @author Winter Lau  
  13.  */  
  14. public class GmailFetch {   
  15.     
  16.  public static void main(String argv[]) throws Exception {   
  17.   
  18.   Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());   
  19.   final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";   
  20.   
  21.   // Get a Properties object   
  22.   Properties props = System.getProperties();   
  23.   props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY);   
  24.   props.setProperty("mail.pop3.socketFactory.fallback""false");   
  25.   props.setProperty("mail.pop3.port""995");   
  26.   props.setProperty("mail.pop3.socketFactory.port""995");   
  27.   
  28.   //以下步骤跟一般的JavaMail操作相同   
  29.   Session session = Session.getDefaultInstance(props,null);   
  30.   
  31.   //请将红色部分对应替换成你的邮箱帐号和密码   
  32.   URLName urln = new URLName("pop3","pop.gmail.com",995,null,   
  33.     "[邮箱帐号]""[邮箱密码]");   
  34.   Store store = session.getStore(urln);   
  35.   Folder inbox = null;   
  36.   try {   
  37.    store.connect();   
  38.    inbox = store.getFolder("INBOX");   
  39.    inbox.open(Folder.READ_ONLY);   
  40.    FetchProfile profile = new FetchProfile();   
  41.    profile.add(FetchProfile.Item.ENVELOPE);   
  42.    Message[] messages = inbox.getMessages();   
  43.    inbox.fetch(messages, profile);   
  44.    System.out.println("收件箱的邮件数:" + messages.length);   
  45.    for (int i = 0; i < messages.length; i++) {   
  46.     //邮件发送者   
  47.     String from = decodeText(messages[i].getFrom()[0].toString());   
  48.     InternetAddress ia = new InternetAddress(from);   
  49.     System.out.println("FROM:" + ia.getPersonal()+'('+ia.getAddress()+')');   
  50.     //邮件标题   
  51.     System.out.println("TITLE:" + messages[i].getSubject());   
  52.     //邮件大小   
  53.     System.out.println("SIZE:" + messages[i].getSize());   
  54.     //邮件发送时间   
  55.     System.out.println("DATE:" + messages[i].getSentDate());   
  56.    }   
  57.   } finally {   
  58.    try {   
  59.     inbox.close(false);   
  60.    } catch (Exception e) {}   
  61.    try {   
  62.     store.close();   
  63.    } catch (Exception e) {}   
  64.   }   
  65.  }   
  66.     
  67.  protected static String decodeText(String text)   
  68.    throws UnsupportedEncodingException {   
  69.   if (text == null)   
  70.    return null;   
  71.   if (text.startsWith("=?GB") || text.startsWith("=?gb"))   
  72.    text = MimeUtility.decodeText(text);   
  73.   else  
  74.    text = new String(text.getBytes("ISO8859_1"));   
  75.   return text;   
  76.  }   
  77.   
  78. }  
package lius.javamail.ssl;

import java.io.UnsupportedEncodingException;
import java.security.*;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeUtility;

/**
 * 用于收取Gmail邮件
 * @author Winter Lau
 */
public class GmailFetch {
 
 public static void main(String argv[]) throws Exception {

  Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
  final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

  // Get a Properties object
  Properties props = System.getProperties();
  props.setProperty("mail.pop3.socketFactory.class", SSL_FACTORY);
  props.setProperty("mail.pop3.socketFactory.fallback", "false");
  props.setProperty("mail.pop3.port", "995");
  props.setProperty("mail.pop3.socketFactory.port", "995");

  //以下步骤跟一般的JavaMail操作相同
  Session session = Session.getDefaultInstance(props,null);

  //请将红色部分对应替换成你的邮箱帐号和密码
  URLName urln = new URLName("pop3","pop.gmail.com",995,null,
    "[邮箱帐号]", "[邮箱密码]");
  Store store = session.getStore(urln);
  Folder inbox = null;
  try {
   store.connect();
   inbox = store.getFolder("INBOX");
   inbox.open(Folder.READ_ONLY);
   FetchProfile profile = new FetchProfile();
   profile.add(FetchProfile.Item.ENVELOPE);
   Message[] messages = inbox.getMessages();
   inbox.fetch(messages, profile);
   System.out.println("收件箱的邮件数:" + messages.length);
   for (int i = 0; i < messages.length; i++) {
    //邮件发送者
    String from = decodeText(messages[i].getFrom()[0].toString());
    InternetAddress ia = new InternetAddress(from);
    System.out.println("FROM:" + ia.getPersonal()+'('+ia.getAddress()+')');
    //邮件标题
    System.out.println("TITLE:" + messages[i].getSubject());
    //邮件大小
    System.out.println("SIZE:" + messages[i].getSize());
    //邮件发送时间
    System.out.println("DATE:" + messages[i].getSentDate());
   }
  } finally {
   try {
    inbox.close(false);
   } catch (Exception e) {}
   try {
    store.close();
   } catch (Exception e) {}
  }
 }
 
 protected static String decodeText(String text)
   throws UnsupportedEncodingException {
  if (text == null)
   return null;
  if (text.startsWith("=?GB") || text.startsWith("=?gb"))
   text = MimeUtility.decodeText(text);
  else
   text = new String(text.getBytes("ISO8859_1"));
  return text;
 }

}


2. 发送邮件

Java代码 复制代码 收藏代码
  1. package lius.javamail.ssl;   
  2.   
  3. import java.security.Security;   
  4. import java.util.Date;   
  5. import java.util.Properties;   
  6.   
  7. import javax.mail.Authenticator;   
  8. import javax.mail.Message;   
  9. import javax.mail.MessagingException;   
  10. import javax.mail.PasswordAuthentication;   
  11. import javax.mail.Session;   
  12. import javax.mail.Transport;   
  13. import javax.mail.internet.AddressException;   
  14. import javax.mail.internet.InternetAddress;   
  15. import javax.mail.internet.MimeMessage;   
  16.   
  17. /**  
  18.  * 使用Gmail发送邮件  
  19.  * @author Winter Lau  
  20.  */  
  21. public class GmailSender {   
  22.   
  23.  public static void main(String[] args) throws AddressException, MessagingException {   
  24.   Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());   
  25.   final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";   
  26.   // Get a Properties object   
  27.   Properties props = System.getProperties();   
  28.   props.setProperty("mail.smtp.host""smtp.gmail.com");   
  29.   props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);   
  30.   props.setProperty("mail.smtp.socketFactory.fallback""false");   
  31.   props.setProperty("mail.smtp.port""465");   
  32.   props.setProperty("mail.smtp.socketFactory.port""465");   
  33.   props.put("mail.smtp.auth""true");   
  34.   final String username = "[邮箱帐号]";   
  35.   final String password = "[邮箱密码]";   
  36.   Session session = Session.getDefaultInstance(props, new Authenticator(){   
  37.       protected PasswordAuthentication getPasswordAuthentication() {   
  38.           return new PasswordAuthentication(username, password);   
  39.       }});   
  40.   
  41.        // -- Create a new message --   
  42.   Message msg = new MimeMessage(session);   
  43.   
  44.   // -- Set the FROM and TO fields --   
  45.   msg.setFrom(new InternetAddress(username + "@mo168.com"));   
  46.   msg.setRecipients(Message.RecipientType.TO,    
  47.     InternetAddress.parse("[收件人地址]",false));   
  48.   msg.setSubject("Hello");   
  49.   msg.setText("How are you");   
  50.   msg.setSentDate(new Date());   
  51.   Transport.send(msg);   
  52.      
  53.   System.out.println("Message sent.");   
  54.  }   
  55. }  
package lius.javamail.ssl;

import java.security.Security;
import java.util.Date;
import java.util.Properties;

import javax.mail.Authenticator;
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;

/**
 * 使用Gmail发送邮件
 * @author Winter Lau
 */
public class GmailSender {

 public static void main(String[] args) throws AddressException, MessagingException {
  Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
  final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
  // Get a Properties object
  Properties props = System.getProperties();
  props.setProperty("mail.smtp.host", "smtp.gmail.com");
  props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
  props.setProperty("mail.smtp.socketFactory.fallback", "false");
  props.setProperty("mail.smtp.port", "465");
  props.setProperty("mail.smtp.socketFactory.port", "465");
  props.put("mail.smtp.auth", "true");
  final String username = "[邮箱帐号]";
  final String password = "[邮箱密码]";
  Session session = Session.getDefaultInstance(props, new Authenticator(){
      protected PasswordAuthentication getPasswordAuthentication() {
          return new PasswordAuthentication(username, password);
      }});

       // -- Create a new message --
  Message msg = new MimeMessage(session);

  // -- Set the FROM and TO fields --
  msg.setFrom(new InternetAddress(username + "@mo168.com"));
  msg.setRecipients(Message.RecipientType.TO, 
    InternetAddress.parse("[收件人地址]",false));
  msg.setSubject("Hello");
  msg.setText("How are you");
  msg.setSentDate(new Date());
  Transport.send(msg);
  
  System.out.println("Message sent.");
 }
}



关于邮件的解析请看 http://www.javayou.com/showlog.jspe?log_id=372
更多关于javamail的文章 http://www.javayou.com/main.jspe?query=javamail

分享到:
评论

相关推荐

    JavaMail收发Gmail邮件

    ### JavaMail收发Gmail邮件知识点详解 ...通过以上步骤,我们可以使用JavaMail实现对Gmail邮件的收发功能,并且通过SSL加密技术确保了数据的安全传输。这对于开发涉及邮件处理的应用程序非常有用。

    利用 spring mail 通过 gmail(SSL) 发邮件

    本教程将详细讲解如何利用Spring Mail通过Gmail的SSL(安全套接层)协议来发送邮件。 首先,我们需要在项目中引入Spring Mail的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml &lt;groupId&gt;...

    Gmail邮件通过JavaMail发送(不带附件与带一个附件)

    使用`MimeMessage`类创建一个邮件对象,并设置发件人、收件人、主题和内容。 ```java MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(FROM_ADDRESS)); message....

    javamail 发送邮件的例子(通过了qq 和gmail的邮箱)有SSL 安全的方式

    这个例子展示了如何使用JavaMail API通过QQ和Gmail邮箱实现邮件的发送,并且使用了SSL(Secure Socket Layer)来确保通信的安全性。SSL是网络安全传输的一种标准,它可以加密传输的数据,防止在互联网上被窃取或篡改...

    javamail邮件发送接收测试

    `Folder` 对象的 `getMessages()` 方法可以获取邮件列表,每封邮件都是一个 `Message` 对象,可以通过 `Message` 的方法来读取具体内容,如发件人、收件人、主题、日期等。 在这个“outmail”文件中,可能包含了...

    JavaMail邮件发送源码 非常简单

    为了确保邮件发送的成功,开发者需要了解SMTP服务器的设置,包括是否需要SSL/TLS加密连接,以及正确的端口号。某些邮件服务商如Gmail、Yahoo、Outlook等可能需要开启"不安全的应用程序访问"权限。 总的来说,...

    用javaMail发邮件

    3. 构造邮件消息:使用`Message`类创建一个邮件对象,并设置发件人、收件人、主题和正文。 ```java Message message = new MimeMessage(session); message.setFrom(new InternetAddress("your-email@example.com"))...

    javamail发送邮件实例

    此外,如果邮件包含敏感信息,务必确保传输过程的安全性,例如启用SSL/TLS加密。 以上就是使用JavaMail发送邮件的详细过程,以及与文本编辑器KindEditor的集成方式。在开发过程中,记得根据具体需求调整和优化代码...

    用Java类实现JavaMail发送邮件的例子

    在这个例子中,`setNeedAuth`方法用于设置是否需要SMTP身份认证,`setFrom`、`setRecipient`等方法用于设置邮件的发件人和收件人,`setSubject`用于设置邮件主题,`setText`或`addBodyPart`用于设置邮件正文(可以是...

    Spring实现JavaMail邮件发送功能

    在本篇文章中,我们将深入探讨如何利用Spring来实现JavaMail邮件发送,以及在实际应用中需要注意的关键点。 首先,我们需要理解JavaMail API的基础概念。JavaMail是一个用于处理邮件的开放源码API,它允许开发者...

    javaMail发邮件

    JavaMail 还支持更复杂的功能,如发送 HTML 邮件、添加附件、使用 SSL/TLS 加密连接等。你可以通过调整 `Message` 对象和配置 `Properties` 来实现这些功能。 此外,JavaMail 提供了对 POP3(邮局协议)和 IMAP...

    利用JavaMail for Android和MailSender实现发送邮件

    在Android开发中,有时我们需要为用户提供发送邮件的功能,例如报告应用错误、分享内容或接收服务通知。JavaMail for Android和...在实际应用中,确保遵循最佳实践,如使用SSL/TLS加密连接,以保护用户数据的安全。

    javamail实现发送邮件

    2. **创建 Message 对象**:Message 是邮件实体,包含了邮件的头部信息(如发件人、收件人、主题和日期)以及邮件内容。使用 `MimeMessage` 类创建一个实例,并设置相应的属性。 ```java MimeMessage message = new...

    javaMail API 跟 javaMail.jar包

    同时,JavaMail API也支持SSL/TLS加密,以确保邮件通信的安全性。 总之,JavaMail API和`javaMail.jar`是Java开发者处理电子邮件不可或缺的工具,它们提供了强大的功能,使得在程序中发送和接收邮件变得简单易行。

    06_传智播客张孝祥java邮件开发_编写一个JavaMail发送邮件的程序.rar

    这个教程可能还会涵盖更高级的主题,如处理邮件认证问题、使用SSL/TLS加密连接、调试邮件发送过程等。同时,可能会涉及到异常处理,因为邮件发送过程中可能会出现网络问题或其他错误。 总之,JavaMail API 提供了一...

    JavaMail.jar java发送邮件必备jar包

    - **SSL/TLS 安全连接**:通过配置,可以在不安全的网络环境中安全地连接邮件服务器。 - **邮件过滤和搜索**:使用 `Folder.search()` 方法可以按条件搜索邮件,配合 `Message旗标` 可以进行邮件过滤。 - **邮件...

    使用javamail,commons-mail发送邮件实例

    4. **构建邮件**:使用`Commons-Mail`的`Email`类创建邮件实例,设置收件人、发件人、主题和正文: ```java Email email = new SimpleEmail(); email.setFrom("your-email@example.com"); email.setSubject(...

    获取邮件未读、已读共计几封信息

    - 使用SSL/TLS连接以保护通信的安全性。 - 定期更新库和依赖,以防已知漏洞被利用。 5. **扩展功能** - 可以定期检查邮件状态,当达到特定条件时触发提醒或自动处理。 - 结合Webhook或其他通知服务,实时报告...

    javamail实例

    为了安全地发送和接收邮件,通常需要启用SSL/TLS加密。可以通过设置`mail.smtp.starttls.enable`和`mail.smtp.ssl.enable`属性来开启。 6. **异常处理** 在实际编程中,应处理可能出现的异常,如...

    javamail批量发送邮件

    1. **配置邮件服务器**:首先,你需要知道你的邮件服务商的SMTP服务器地址、端口号,以及是否需要SSL/TLS加密。这些信息可以在邮件服务提供商的帮助文档中找到。例如,对于Gmail,SMTP服务器通常是smtp.gmail.com,...

Global site tag (gtag.js) - Google Analytics