java Mail

电子邮件的应用非常广泛,例如在某网站注册了一个账户,自动发送一封欢迎邮件,通过邮件找回密码,自动批量发送活动信息等。但这些应用不可能和我们自己平时发邮件一样,先打开浏览器,登录邮箱,创建邮件再发送。本文将简单介绍如何通过 Java 代码来创建电子邮件,并连接邮件服务器发送邮件。

现在,我们来先来了解一下电子邮件协议SMTP 是 Simple Mail Transfer Protocol 的简称,即简单邮件传输协议。电子邮件的在网络中传输和网页一样需要遵从特定的协议,常用的电子邮件协议包括 SMTP,POP3,IMAP。其中邮件的创建和发送只需要用到 SMTP协议,所以本文也只会涉及到SMTP协议。

我们再来了解一下开发javamail程序必备的jar包——javax.mail.jar,Java 官方提供了对电子邮件协议封装的 Java 类库,就是JavaMail,但并没有包含到标准的 JDK 中,需要我们自己去下载。

JavaMail 下载地址:https://github.com/javaee/javamail/releases


下载javamail页面截图

jar包下载好后,我们还需要有一个邮箱账号去发送,这里我们选用163邮箱为例子,邮箱账号必须要开启 SMTP 服务,在浏览器网页登录邮箱后一般在邮箱的“设置”选项中可以开启,并记下邮箱的 SMTP 服务器地址


163邮箱设置截图

下面我们就开始写java程序了。

首先创建一个 Java 工程,把下载好的javax.mail.jar作为类库加入工程。

下面介绍javaMail发送简单文本的实例:

package com.xx.javaMaildome;

import java.util.Date;

import java.util.Properties;

import javax.mail.Session;

import javax.mail.Transport;

import javax.mail.internet.InternetAddress;

import javax.mail.internet.MimeMessage;

public class Mail {

public static String myEmailAccount="*************@163.com";//我的账号

public static String myEmailPassword="***********";//账号密码

public static String myEmailSMTPHost="smtp.163.com";//发件人邮箱的 SMTP 服务器地址

public static String receiveMailAccount="***********@qq.com";//收件人邮箱

public static void main(String[] args)throws Exception

{

//1.创建参数配置,用于连接邮件服务器的参数配置

Properties properties=new Properties();

properties.setProperty("mail.transport.protocol", "smtp");//使用的协议(JavaMail规范要求)

properties.setProperty("mail.smtp.host", myEmailSMTPHost);//发件人的邮箱的 SMTP 服务器地址

properties.setProperty("mail.smtp.auth", "true");//需要请求认证

// 2. 根据配置创建会话对象, 用于和邮件服务器交互

Session session=Session.getInstance(properties);

session.setDebug(true);//设置为debug模式,可以查看详细的发送log

//3.创建一封邮件

MimeMessage message=createMimeMessage(session, myEmailAccount, receiveMailAccount);

//4.根据session获取邮件传输对象

Transport transport=session.getTransport();

transport.connect(myEmailAccount, myEmailPassword);

transport.sendMessage(message,message.getAllRecipients());

transport.close();//关闭连接

System.out.println("邮件发送成功");

}

/**

* 创建一封只包含文本的简单邮件

*

* @param session 和服务器交互的会话

* @param sendMail 发件人邮箱

* @param receiveMail 收件人邮箱

* @return

* @throws Exception

*/

private static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail)throws Exception {

// TODO Auto-generated method stub

MimeMessage message=new MimeMessage(session);//创建一封邮件

message.setFrom(new InternetAddress(sendMail, "邮件", "UTF-8"));//发件人

message.setRecipient(MimeMessage.RecipientType.TO,new InternetAddress(receiveMail, "Mary", "UTF-8"));//收件人

message.setSubject("解释","UTF-8");//邮件主题

message.setContent("这是用程序发送的邮件哦,不是在客户端上写的", "text/html;charset=utf-8");

message.setSentDate(new Date());

message.saveChanges();//保存设置

return message;}

}

以上就是发送javaMail发送简单文本的实例,在发送的过程中,出现问题的不是代码出错,而是邮件被作为垃圾邮件发布出去,被163的服务器拦截掉。然后就出现以下错误:


错误截图

错误参考:http://mail.163.com/help/help_spam_16.htmip=221.224.54.186&hostid=smtp14&time=1512436245

解决办法:修改你发送的内容,比如我上面的内容,经过测试是可以发送成功的。

至此,简单的javaMail发送文本文件就完成了。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,117评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,328评论 1 293
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,839评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,007评论 0 206
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,384评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,629评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,880评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,593评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,313评论 1 243
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,575评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,066评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,392评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,052评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,082评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,844评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,662评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,575评论 2 270

推荐阅读更多精彩内容

  • 本文包括:1、名词解释2、邮件收发过程3、JavaMail 知识概要4、发送一封符合 MIME 协议的 JavaM...
    廖少少阅读 3,849评论 2 13
  • 最近在做邮件发送的功能,发现163邮箱老是无法发送成功,报端口错误,所以把下面的配置记录下来,以供大家参考。 16...
    小徐2016阅读 3,680评论 0 2
  • Java Mail 简介 常见的邮件协议包括:SMTP(Simple Mail Transfer Protocol...
    Josaber阅读 3,166评论 1 9
  • ``` public class MailU { public static void sendMail(Stri...
    尼尔君阅读 246评论 0 0
  • 概述 邮件相关的标准 厂商所提供的 JavaMail 服务程序可以有选择地实现某些邮件协议,常见的邮件协议包括: ...
    静默虚空阅读 2,112评论 -1 4