Gmail目前已经启用了POP3和SMTP服务,具体情况请看 http://www.javayou.com/showlog.jspe?log_id=490
与其他邮箱不同的是Gmail提供的POP3和SMTP是使用安全套接字层SSL的,因此常规的JavaMail程序是无法收发邮件的,下面是使用JavaMail如何收取Gmail邮件以及发送邮件的代码:
1. 邮件收取
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. 发送邮件
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邮件的收发功能,并且通过SSL加密技术确保了数据的安全传输。这对于开发涉及邮件处理的应用程序非常有用。
使用`MimeMessage`类创建一个邮件对象,并设置发件人、收件人、主题和内容。 ```java MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress(FROM_ADDRESS)); message....
本教程将详细讲解如何利用Spring Mail通过Gmail的SSL(安全套接层)协议来发送邮件。 首先,我们需要在项目中引入Spring Mail的依赖。如果你使用的是Maven,可以在pom.xml文件中添加以下依赖: ```xml <groupId>...
这个例子展示了如何使用JavaMail API通过QQ和Gmail邮箱实现邮件的发送,并且使用了SSL(Secure Socket Layer)来确保通信的安全性。SSL是网络安全传输的一种标准,它可以加密传输的数据,防止在互联网上被窃取或篡改...
`Folder` 对象的 `getMessages()` 方法可以获取邮件列表,每封邮件都是一个 `Message` 对象,可以通过 `Message` 的方法来读取具体内容,如发件人、收件人、主题、日期等。 在这个“outmail”文件中,可能包含了...
为了确保邮件发送的成功,开发者需要了解SMTP服务器的设置,包括是否需要SSL/TLS加密连接,以及正确的端口号。某些邮件服务商如Gmail、Yahoo、Outlook等可能需要开启"不安全的应用程序访问"权限。 总的来说,...
3. 构造邮件消息:使用`Message`类创建一个邮件对象,并设置发件人、收件人、主题和正文。 ```java Message message = new MimeMessage(session); message.setFrom(new InternetAddress("your-email@example.com"))...
此外,如果邮件包含敏感信息,务必确保传输过程的安全性,例如启用SSL/TLS加密。 以上就是使用JavaMail发送邮件的详细过程,以及与文本编辑器KindEditor的集成方式。在开发过程中,记得根据具体需求调整和优化代码...
在这个例子中,`setNeedAuth`方法用于设置是否需要SMTP身份认证,`setFrom`、`setRecipient`等方法用于设置邮件的发件人和收件人,`setSubject`用于设置邮件主题,`setText`或`addBodyPart`用于设置邮件正文(可以是...
在本篇文章中,我们将深入探讨如何利用Spring来实现JavaMail邮件发送,以及在实际应用中需要注意的关键点。 首先,我们需要理解JavaMail API的基础概念。JavaMail是一个用于处理邮件的开放源码API,它允许开发者...
JavaMail 还支持更复杂的功能,如发送 HTML 邮件、添加附件、使用 SSL/TLS 加密连接等。你可以通过调整 `Message` 对象和配置 `Properties` 来实现这些功能。 此外,JavaMail 提供了对 POP3(邮局协议)和 IMAP...
在Android开发中,有时我们需要为用户提供发送邮件的功能,例如报告应用错误、分享内容或接收服务通知。JavaMail for Android和...在实际应用中,确保遵循最佳实践,如使用SSL/TLS加密连接,以保护用户数据的安全。
2. **创建 Message 对象**:Message 是邮件实体,包含了邮件的头部信息(如发件人、收件人、主题和日期)以及邮件内容。使用 `MimeMessage` 类创建一个实例,并设置相应的属性。 ```java MimeMessage message = new...
同时,JavaMail API也支持SSL/TLS加密,以确保邮件通信的安全性。 总之,JavaMail API和`javaMail.jar`是Java开发者处理电子邮件不可或缺的工具,它们提供了强大的功能,使得在程序中发送和接收邮件变得简单易行。
这个教程可能还会涵盖更高级的主题,如处理邮件认证问题、使用SSL/TLS加密连接、调试邮件发送过程等。同时,可能会涉及到异常处理,因为邮件发送过程中可能会出现网络问题或其他错误。 总之,JavaMail API 提供了一...
- **SSL/TLS 安全连接**:通过配置,可以在不安全的网络环境中安全地连接邮件服务器。 - **邮件过滤和搜索**:使用 `Folder.search()` 方法可以按条件搜索邮件,配合 `Message旗标` 可以进行邮件过滤。 - **邮件...
4. **构建邮件**:使用`Commons-Mail`的`Email`类创建邮件实例,设置收件人、发件人、主题和正文: ```java Email email = new SimpleEmail(); email.setFrom("your-email@example.com"); email.setSubject(...
- 使用SSL/TLS连接以保护通信的安全性。 - 定期更新库和依赖,以防已知漏洞被利用。 5. **扩展功能** - 可以定期检查邮件状态,当达到特定条件时触发提醒或自动处理。 - 结合Webhook或其他通知服务,实时报告...
为了安全地发送和接收邮件,通常需要启用SSL/TLS加密。可以通过设置`mail.smtp.starttls.enable`和`mail.smtp.ssl.enable`属性来开启。 6. **异常处理** 在实际编程中,应处理可能出现的异常,如...
1. **配置邮件服务器**:首先,你需要知道你的邮件服务商的SMTP服务器地址、端口号,以及是否需要SSL/TLS加密。这些信息可以在邮件服务提供商的帮助文档中找到。例如,对于Gmail,SMTP服务器通常是smtp.gmail.com,...