POP3_使用SSL链接邮箱并获取邮件
Gmail目前已经启用了POP3和SMTP服务,与其他邮箱不同的是Gmail提供的POP3和SMTP是使用安全套接字层SSL的,因此常规的JavaMail程序是无法收发邮件的,下面是使用JavaMail如何收取Gmail邮件以及发送邮件的代码:
1. [代码]GmailFetch.java 跳至 [1] [2] [全屏预览]
01 package lius.javamail.ssl;
02
03 import java.io.UnsupportedEncodingException;
04 import java.security.*;
05 import java.util.Properties;
06 import javax.mail.*;
07 import javax.mail.internet.InternetAddress;
08 import javax.mail.internet.MimeUtility;
09
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 }
2. [代码]GmailSender.java
01 package lius.javamail.ssl;
02
03 import java.security.Security;
04 import java.util.Date;
05 import java.util.Properties;
06
07 import javax.mail.Authenticator;
08 import javax.mail.Message;
09 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 }
POP3_使用SSL链接邮箱并获取邮件的更多相关文章
- javamail模拟邮箱功能获取邮件内容-中级实战篇【内容|附件下载方法】(javamail API电子邮件实例)
引言: JavaMail jar包下载地址:http://java.sun.com/products/javamail/downloads/index.html 此篇是紧随上篇文章而封装出来的,阅读本 ...
- 采用模拟账号读取Exchange server未读邮件的注意事项(链接邮箱问题)【转】
最近做项目碰到Exchange中,用EWS API方法读取的未读邮箱(ConnectingIdType.PrincipalName设置该属性的方法)附带代码部分: 核心代码 using Microso ...
- java解析邮箱中的邮件信息
import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import ...
- python3使用imaplib获取邮件
imaplib 获取邮件,email解析邮件config文件中存有路径 1 # config.py 2 FILE_PATH_PREFIX = os.getcwd() + '/static/' 3 FI ...
- linux mail利用外部邮箱地址发邮件
mail命令发送邮件需要sendmail或postfix服务 三种常用格式发信 mail -s "标题" xxx@xxx.xxx #第一种方法,你可以把当前shell当成编辑器来用 ...
- 日期格式化(类似QQ邮箱中的邮件列表显示日期)
日期格式化(类似QQ邮箱中的邮件列表显示日期) public static string FormatDateDisplay(DateTime _datetime) { var ts = DateTi ...
- C# 通过HTTP代理访问Socket来获取邮件
C# 通过HTTP代理访问Socket来获取邮件 关键穿透代理的代码(通过HTTP代理获取TcpClent) public class ClientHelper { public static Tcp ...
- C#获取邮件客户端保存的邮箱密码
有时候邮件客户端记录了邮箱密码,但自己却忘记了,此时可以使用C#建立一个临时的"邮件服务器",截取密码: IPEndPoint ipEndPoint = new IPEndPoin ...
- PHP中利用PHPMailer配合QQ邮箱实现发邮件
PHPMailer的介绍: 优点: 可运行在任何平台之上 支持SMTP验证 发送邮时指定多个收件人,抄送地址,暗送地址和回复地址:注:添加抄送.暗送仅win平台下smtp方式支持 支持多种邮件编码包括 ...
随机推荐
- Struts2_day01
一.内容大纲 1 struts2概述 (1)应用在web层 2 struts2入门案例 3 struts2底层执行过程 4 struts2相关配置 (1)struts.xml配置 - package. ...
- .NET面试题系列(七)IIS
应用程序池的集成模式和经典模式的区别 应用程序池模式会影响服务器处理托管代码请求的方式. 如果托管应用程序在采用集成模式的应用程序池中运行,服务器将使用 IIS 和 ASP.NET 的集成请求处理管道 ...
- iOS手势UIGestureRecognizer的使用及手势冲突的解决办法【转】
转自:iOS开发中的手势体系——UIGestureRecognizer分析及其子类的使用 关于手势的一篇很好的帖子,转载过来免得丢失.你可能最感兴趣的是手势间的互斥处理,那么就搜索 4.手势间的互斥处 ...
- HDU 2988 Dark roads (裸的最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2988 解题报告:一个裸的最小生成树,没看题,只知道结果是用所有道路的总长度减去最小生成树的长度和. # ...
- 【C++】wchar、char格式化符输出
VC.BCB.MinGW Linux下的GCC.C99标准 printf wprintf printf wprintf s char wchar_t char S wchar_t char * hs ...
- centos7 部署 open-falcon 0.2.0
=============================================== 2019/4/29_第3次修改 ccb_warlock 更新 ...
- ASP.NET中Request.ApplicationPath、Request.FilePath、Request.Path、.Request.MapPath、
1.Request.ApplicationPath->当前应用的目录 Jsp中, ApplicationPath指的是当前的application(应用程序)的目录,ASP.NET中也是这 ...
- Java编程的逻辑 (3) - 基本运算
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http:/ ...
- Authentication(Spring Security 认证笔记)
这篇文章是对Spring Security的Authentication模块进行一个初步的概念了解,知道它是如何进行用户认证的 考虑一个大家比较熟悉的标准认证过程: 1.用户使用username和pa ...
- homestead实现外部局域网络其他主机的访问
转载自:https://blog.csdn.net/u013659696/article/details/78455362 homestead 2.0 MAC环境 修改Homestead目录下的Vag ...