Java 发送邮件
使用Java应用程序发送E-mail十分简单,但是首先你应该在你的机器上安装JavaMail API 和Java Activation Framework (JAF) 。
你可以在 JavaMail (Version 1.2) 下载最新的版本。
你可以再 在JAF (Version 1.1.1)下载最新的版本。
下载并解压这些文件,最上层文件夹你会发现很多的jar文件。你需要将mail.jar和activation.jar 添加到你的CLASSPATH中。
如果你使用第三方邮件服务器如QQ的SMTP服务器,可查看文章底部用户认证完整的实例。
发送一封简单的 E-mail
下面是一个发送简单E-mail的例子。假设你的localhost已经连接到网络。
- // 文件名 SendEmail.java
- import java.util.*;
- import javax.mail.*;
- import javax.mail.internet.*;
- import javax.activation.*;
- public class SendEmail
- {
- public static void main(String [] args)
- {
- // 收件人电子邮箱
- String to = "abcd@gmail.com";
- // 发件人电子邮箱
- String from = "web@gmail.com";
- // 指定发送邮件的主机为 localhost
- String host = "localhost";
- // 获取系统属性
- Properties properties = System.getProperties();
- // 设置邮件服务器
- properties.setProperty("mail.smtp.host", host);
- // 获取默认session对象
- Session session = Session.getDefaultInstance(properties);
- try{
- // 创建默认的 MimeMessage 对象
- MimeMessage message = new MimeMessage(session);
- // Set From: 头部头字段
- message.setFrom(new InternetAddress(from));
- // Set To: 头部头字段
- message.addRecipient(Message.RecipientType.TO,
- new InternetAddress(to));
- // Set Subject: 头部头字段
- message.setSubject("This is the Subject Line!");
- // 设置消息体
- message.setText("This is actual message");
- // 发送消息
- Transport.send(message);
- System.out.println("Sent message successfully....");
- }catch (MessagingException mex) {
- mex.printStackTrace();
- }
- }
- }
编译并运行这个程序来发送一封简单的E-mail:
- $ java SendEmail
- Sent message successfully....
如果你想发送一封e-mail给多个收件人,那么使用下面的方法来指定多个收件人ID:
- void addRecipients(Message.RecipientType type,
- Address[] addresses)
- throws MessagingException
下面是对于参数的描述:
type:要被设置为TO, CC 或者BCC. 这里CC 代表抄送、BCC 代表秘密抄送y. 举例:Message.RecipientType.TO
addresses: 这是email ID的数组。在指定电子邮件ID时,你将需要使用InternetAddress()方法。
发送一封HTML E-mail
下面是一个发送HTML E-mail的例子。假设你的localhost已经连接到网络。
和上一个例子很相似,除了我们要使用setContent()方法来通过第二个参数为"text/html",来设置内容来指定要发送HTML内容。
- // 文件名 SendHTMLEmail.java
- import java.util.*;
- import javax.mail.*;
- import javax.mail.internet.*;
- import javax.activation.*;
- public class SendHTMLEmail
- {
- public static void main(String [] args)
- {
- // 收件人电子邮箱
- String to = "abcd@gmail.com";
- // 发件人电子邮箱
- String from = "web@gmail.com";
- // 指定发送邮件的主机为 localhost
- String host = "localhost";
- // 获取系统属性
- Properties properties = System.getProperties();
- // 设置邮件服务器
- properties.setProperty("mail.smtp.host", host);
- // 获取默认的 Session 对象。
- Session session = Session.getDefaultInstance(properties);
- try{
- // 创建默认的 MimeMessage 对象。
- MimeMessage message = new MimeMessage(session);
- // Set From: 头部头字段
- message.setFrom(new InternetAddress(from));
- // Set To: 头部头字段
- message.addRecipient(Message.RecipientType.TO,
- new InternetAddress(to));
- // Set Subject: 头字段
- message.setSubject("This is the Subject Line!");
- // 发送 HTML 消息, 可以插入html标签
- message.setContent("<h1>This is actual message</h1>",
- "text/html" );
- // 发送消息
- Transport.send(message);
- System.out.println("Sent message successfully....");
- }catch (MessagingException mex) {
- mex.printStackTrace();
- }
- }
- }
编译并运行此程序来发送HTML e-mail:
- $ java SendHTMLEmail
- Sent message successfully....
发送带有附件的 E-mail
下面是一个发送带有附件的 E-mail的例子。假设你的localhost已经连接到网络。
- // 文件名 SendFileEmail.java
- import java.util.*;
- import javax.mail.*;
- import javax.mail.internet.*;
- import javax.activation.*;
- public class SendFileEmail
- {
- public static void main(String [] args)
- {
- // 收件人电子邮箱
- String to = "abcd@gmail.com";
- // 发件人电子邮箱
- String from = "web@gmail.com";
- // 指定发送邮件的主机为 localhost
- String host = "localhost";
- // 获取系统属性
- Properties properties = System.getProperties();
- // 设置邮件服务器
- properties.setProperty("mail.smtp.host", host);
- // 获取默认的 Session 对象。
- Session session = Session.getDefaultInstance(properties);
- try{
- // 创建默认的 MimeMessage 对象。
- MimeMessage message = new MimeMessage(session);
- // Set From: 头部头字段
- message.setFrom(new InternetAddress(from));
- // Set To: 头部头字段
- message.addRecipient(Message.RecipientType.TO,
- new InternetAddress(to));
- // Set Subject: 头字段
- message.setSubject("This is the Subject Line!");
- // 创建消息部分
- BodyPart messageBodyPart = new MimeBodyPart();
- // 消息
- messageBodyPart.setText("This is message body");
- // 创建多重消息
- Multipart multipart = new MimeMultipart();
- // 设置文本消息部分
- multipart.addBodyPart(messageBodyPart);
- // 附件部分
- messageBodyPart = new MimeBodyPart();
- String filename = "file.txt";
- DataSource source = new FileDataSource(filename);
- messageBodyPart.setDataHandler(new DataHandler(source));
- messageBodyPart.setFileName(filename);
- multipart.addBodyPart(messageBodyPart);
- // 发送完整消息
- message.setContent(multipart );
- // 发送消息
- Transport.send(message);
- System.out.println("Sent message successfully....");
- }catch (MessagingException mex) {
- mex.printStackTrace();
- }
- }
- }
编译并运行你的程序来发送一封带有附件的邮件。
- $ java SendFileEmail
- Sent message successfully....
用户认证部分
如果需要提供用户名和密码给e-mail服务器来达到用户认证的目的,你可以通过如下设置来完成:
- props.put("mail.smtp.auth", "true");
- props.setProperty("mail.user", "myuser");
- props.setProperty("mail.password", "mypwd");
e-mail其他的发送机制和上述保持一致。
需要用户名密码验证邮件发送实例:
本实例以QQ邮件服务器为例,你需要在登录QQ邮箱后台在"设置"=》账号中开启POP3/SMTP服务 ,如下图所示:
Java 代码如下:
- // 需要用户名密码邮件发送实例
- //文件名 SendEmail2.java
- //本实例以QQ邮箱为例,你需要在qq后台设置
- 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.InternetAddress;
- import javax.mail.internet.MimeMessage;
- public class SendEmail2
- {
- public static void main(String [] args)
- {
- // 收件人电子邮箱
- String to = "xxx@qq.com";
- // 发件人电子邮箱
- String from = "xxx@qq.com";
- // 指定发送邮件的主机为 localhost
- String host = "smtp.qq.com"; //QQ 邮件服务器
- // 获取系统属性
- Properties properties = System.getProperties();
- // 设置邮件服务器
- properties.setProperty("mail.smtp.host", host);
- properties.put("mail.smtp.auth", "true");
- // 获取默认session对象
- Session session = Session.getDefaultInstance(properties,new Authenticator(){
- public PasswordAuthentication getPasswordAuthentication()
- {
- return new PasswordAuthentication("xxx@qq.com", "qq邮箱密码"); //发件人邮件用户名、密码
- }
- });
- try{
- // 创建默认的 MimeMessage 对象
- MimeMessage message = new MimeMessage(session);
- // Set From: 头部头字段
- message.setFrom(new InternetAddress(from));
- // Set To: 头部头字段
- message.addRecipient(Message.RecipientType.TO,
- new InternetAddress(to));
- // Set Subject: 头部头字段
- message.setSubject("This is the Subject Line!");
- // 设置消息体
- message.setText("This is actual message");
- // 发送消息
- Transport.send(message);
- System.out.println("Sent message successfully....from cnblogs.com");
- }catch (MessagingException mex) {
- mex.printStackTrace();
- }
- }
- }
Java 发送邮件的更多相关文章
- Java发送邮件初窥
一.背景 最近朋友的公司有用到这个功能,之前对这一块也不是很熟悉,就和他一起解决出现的异常的同时,也初窥一下使用Apache Common Email组件进行邮件发送. 二.Java发送邮件的注意事项 ...
- Java发送邮件,所遇到的常见需求
明天要做关于发送邮件的接口,虽然我之前已用Java Mail做过许多关于邮件的发送.但同事说有点难点,虽我还不知难点在哪,还是要复习下.凡事预则立,不预则废嘛~ 所需的包: Java Mail : 目 ...
- 用java发送邮件(黄海已测试通过)
/** * java发送带附件的邮件 * 周枫 * 2013.8.10 */ package com.dsideal.Util; import javax.mail.*; import javax.m ...
- Java发送邮件(带附件)
实现java发送邮件的过程大体有以下几步: 准备一个properties文件,该文件中存放SMTP服务器地址等参数. 利用properties创建一个Session对象 利用Session创建Mess ...
- 用Java发送邮件
要用Java发送邮件,除过JDK本身的jar包之外,还需要两个额外的jar包:JavaMail和JAF.当然,如果你使用的JavaEE的JDK,那就不用单独去网上下载了,因为JavaEE的JDK中已经 ...
- Java发送邮件时标题和发件人乱码
最近碰到一个问题,Java发送邮件时,查看邮箱结果,发件人及邮件标题正文全部乱码 通过翻阅资料,原因及解决方法如下: // Set Subject: 头字段 message.setSubject(Mi ...
- Java - 31 Java 发送邮件
Java 发送邮件 使用Java应用程序发送E-mail十分简单,但是首先你应该在你的机器上安装JavaMail API 和Java Activation Framework (JAF) . 你可以在 ...
- Java-Runoob-高级教程:Java 发送邮件
ylbtech-Java-Runoob-高级教程:Java 发送邮件 1.返回顶部 1. Java 发送邮件 使用Java应用程序发送 E-mail 十分简单,但是首先你应该在你的机器上安装 Java ...
- Java发送邮件--web.xml配置,Java代码配置
前言:我目前总结的使用java发送邮件的方式有两种,分别是在spring框架xml配置文件使用bean标签,另一种方法是把发送功能封装成一个对象,废话不多说上代码, 边看代码边讲解,希望对需要的人能有 ...
- Java发送邮件示例
利用Java发送邮件示例: 1.发送QQ邮件 import java.util.Properties; import javax.mail.Message; import javax.mail.Mes ...
随机推荐
- 【翻译】用AIML实现的Python人工智能聊天机器人
前言 用python的AIML包很容易就能写一个人工智能聊天机器人. AIML是Artificial Intelligence Markup Language的简写, 但它只是一个简单的XML. 下面 ...
- C# 开发windows服务的一些心得
最近在做一个windows服务的项目,发现并解决了一些问题,拿出来和大家分享一下,以下windows服务简称“服务” 文章会在适合时间更新,因为朋友们在不断提出新的意见或思路,感谢-.- 1.服务如何 ...
- 基于Caffe的DeepID2实现(下)
小喵的唠叨话:这次的博客,真心累伤了小喵的心.但考虑到知识需要巩固和分享,小喵决定这次把剩下的内容都写完. 小喵的博客:http://www.miaoerduo.com 博客原文: http://ww ...
- Android浮层点击穿透问题
最近做微信公众号开发的时候遇到一个问题,上线后发现此问题后检查代码没有发现问题,无奈只能回滚到上一个版本. 问题是这样的:页面一个选择的浮层,在浮层点击确定后,下面的页面会自动提交 在测试环境上无法重 ...
- leetcode--5. Longest Palindromic Substring
题目来自 https://leetcode.com/problems/longest-palindromic-substring/ 题目:Given a string S, find the long ...
- 细说Promise
一.前言 JavaScript是单线程的,固,一次只能执行一个任务,当有一个任务耗时很长时,后面的任务就必须等待.那么,有什么办法,可以解决这类问题呢?(抛开WebWorker不谈),那就是让代码异步 ...
- CRL快速开发框架系列教程二(基于Lambda表达式查询)
本系列目录 CRL快速开发框架系列教程一(Code First数据表不需再关心) CRL快速开发框架系列教程二(基于Lambda表达式查询) CRL快速开发框架系列教程三(更新数据) CRL快速开发框 ...
- DDD 领域驱动设计-如何完善 Domain Model(领域模型)?
上一篇:<DDD 领域驱动设计-如何 DDD?> 开源地址:https://github.com/yuezhongxin/CNBlogs.Apply.Sample(代码已更新) 阅读目录: ...
- Vertica 分区表设计
Vertica数据库中的表只是一个逻辑概念. 实际存储在磁盘上的是projection. 当创建一张表,没有创建projection时,那么插入数据的时候会自动创建一个默认的projection.如果 ...
- Python爬虫小白入门(二)requests库
一.前言 为什么要先说Requests库呢,因为这是个功能很强大的网络请求库,可以实现跟浏览器一样发送各种HTTP请求来获取网站的数据.网络上的模块.库.包指的都是同一种东西,所以后文中可能会在不同地 ...