使用Java发送电子邮件

我开始使用Java作为简单的“如何发送电子邮件”来撰写这篇文章,但是后来我发现我需要简要解释更多事情。 因此,这是有关使用Java发送电子邮件的所有摘要。

在Java SE平台之外(但包含在JavaEE中), JavaMail软件包提供了一个用于构建邮件和消息传递应用程序的平台。 让我们举一个例子。

发送一条简单的短信

// Common variables
String host = "your_smtp_server";
String from = "from_address";
String to = "to_address";// Set properties
Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.debug", "true");// Get session
Session session = Session.getInstance(props);try {// Instantiate a messageMessage msg = new MimeMessage(session);// Set the FROM messagemsg.setFrom(new InternetAddress(from));// The recipients can be more than one so we use an array but you can// use 'new InternetAddress(to)' for only one address.InternetAddress[] address = {new InternetAddress(to)};msg.setRecipients(Message.RecipientType.TO, address);// Set the message subject and date we sent it.msg.setSubject("Email from JavaMail test");msg.setSentDate(new Date());// Set message contentmsg.setText("This is the text for this simple demo using JavaMail.");// Send the messageTransport.send(msg);
}
catch (MessagingException mex) {mex.printStackTrace();
}

或者,改为使用:

msg.setText("This is the text for this simple demo using JavaMail.");

您可以使用next设置消息内容:

msg.setContent("This is the text for this simple demo using JavaMail.", "text/plain");

检查电子邮件地址

这是一个使用正则表达式检查电子邮件格式是否正确的小技巧:

Pattern rfc2822 = Pattern.compile("^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$");
if(rfc2822.matcher(EMAIL_ADDRESS).matches()) {// Well formed email
}

多部分消息

很好,但是通常您不会发送简单的短信。 相反,您发送带有粗体或斜体文本,图像等的漂亮HTML正文消息。

注意:请参阅下面的“参考”部分,以了解有关MIME格式的信息,该格式扩展了您可以附加到电子邮件的数据的范围,以允许多部分,附件等。

编写多部分消息时,内容由不同部分组成,例如,一部分是作为简单文本编写的消息,另一部分是使用HTML以增强方式编写的同一消息。 然后,读取消息的客户端负责根据其功能来渲染适当的部分。

...
// Here create two parts and set as message contect
// Create and fill first part
MimeBodyPart part1 = new MimeBodyPart();
part1.setText("This is part one of this multipart message.");// Create and fill second part
MimeBodyPart part2 = new MimeBodyPart();
part2.setText("This is part two of this multipart message.");// Create the Multipart.
Multipart mp = new MimeMultipart();
mp.addBodyPart(part1);
mp.addBodyPart(part2);// Set the message's content
msg.setContent(mp);
...

发送附件

太棒了,我们知道如何发送纯文本电子邮件以及更令人难以置信的内容,例如包含HTML内容的多部分消息。 下一步是发送附加了太多文件的电子邮件。

创建带有附件的电子邮件类似于创建多部分邮件,其中一部分可以是邮件的文本,另一部分可以是附件。 秘密在接下来的几行中:

...
// Create a new part for the attached file
MimeBodyPart part3 = new MimeBodyPart();// Put a file in the second part
FileDataSource fds = new FileDataSource("THE_FILE_NAME");
part3.setDataHandler(new DataHandler(fds));
part3.setFileName(fds.getName());// 'mp' is the previously created 'MimeMultipart' object
mp.addBodyPart(part3);// 'msg' is the previously created 'Message' object
msg.setContent(mp);
...

HTML消息

创建带有HTML内容的多部分消息非常简单,只需在setContent方法中指定MIME类型即可:

...
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent("<h1>Sample</h1><p>This is a sample HTML part</p>", "text/html");
...

在HTML代码中附加图像

如果您使用HTML编写丰富的消息,则可以使用'img'标签添加图像。 如果从外部服务器引用了图像,则没有问题,但是:如何将图像附加到消息并在HTML消息正文中进行呈现?

想法如下:

  • 首先,您需要附加图片文件并设置一个标识符,然后
  • 其次,您需要编写HTML代码并在“ img”标签中引用图片标识符。
...
// Create and fill html part
MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent("<h1>Sample</h1><p>This is a sample HTML part with an attached image</p>" +"<img src='cid:some_image_id'>", "text/html");// Create a new part for the attached image and set the CID image identifier
MimeBodyPart imagePart = new MimeBodyPart();
FileDataSource fds = new FileDataSource("THE_IMAGE_FILE_NAME");
imagePart.setDataHandler(new DataHandler(fds));
imagePart.setHeader("Content-ID", "some_image_id");mp.addBodyPart(htmlPart);
mp.addBodyPart(imagePart);
...

还有什么要说的吗?

至此,您几乎是发送电子邮件的高手。 您知道如何发送简单的电子邮件,具有最丰富HTML内容的多部分电子邮件以及如何在邮件中附加文件和图像。

程序员还能期望什么?

可能是更易于使用的API,这就是Apache Commons Email项目为您提供的。 请参阅“用户指南”部分http://commons.apache.org/email/userguide.html以了解我的意思。 它提供了一个更抽象的API,它比协议更接近人类。

资源资源

  • JavaMail – JavaMail项目主页。
  • Apache Commons Email – Apache Commons子项目,用于简化JavaMail API的使用方式。 请参阅“ 用户指南 ”部分。
  • MIME(多用途Internet邮件扩展名) –多部分电子邮件的MIME格式说明。

参考:在“ A Curious Animal”博客上从我们的JCG合作伙伴 Antonio Santiago 发送Java电子邮件 。

相关文章 :
  • Spring,Quartz和JavaMail集成教程
  • 使用Spring使用Java发送电子邮件– GMail SMTP服务器示例
  • Spring MVC3 Hibernate CRUD示例应用程序
  • Spring MVC开发–快速教程
  • Java教程和Android教程列表

翻译自: https://www.javacodegeeks.com/2011/10/sending-emails-with-java.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/373902.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一张图让你看清Java集合类(Java集合类的总结)

如今关于Java集合类的文章非常多&#xff0c;可是我近期看到一个非常有意思图片&#xff0c;基本上把Java集合的整体框架都给展现出来了。非常直观。 假设发现图片看不清楚。点此处看大图 在这里&#xff0c;集合类分为了Map和Collection两个大的类别。 处于图片左上角的那一块…

CSDN挑战编程——《数学问题》

数学问题 题目详情: 给你两个长度为n的正整数序列分别为{a1,a2,a3...an},{b1,b2,b3...bn},0<ai,bi<100&#xff1b; 设Smax{x1*a1x2*a2x3*a3...xn*an,(1-x1)*b1(1-x2)*b2(1-x3)*b3...(1-xn)*bn}&#xff0c;xi为整数&#xff0c;0<xi<1。 请你求出S的最小值。 输入…

【P1835】小红花

很简单的题&#xff0c;然而我没想到&#xff0c;在NOIP上怎么办嘛QAQ 话说这题不知道怎么分类啊……先扔到玄学里边把…… 原题&#xff1a; Fj在圣诞节来临之际&#xff0c;决定给他的奶牛发一些小红花。现在Fj一共有N头奶牛&#xff0c;这N头牛按照编号1..N&#xff0c;排成…

python多维数组运用_使用Python将文件读入多维数组

If I have a text file like this:Hello WorldHow are you?Bye WorldHow would I read it into a multidimensional array like this:[["Hello", "World"],["How", "are", "you?"],["Bye" "World"]]I…

Java日志混乱

每个应用程序都需要记录日志。 现在&#xff0c;对于在Java中确切使用什么有很多选择。 最著名的框架是&#xff1a;log4j&#xff0c;logback&#xff0c;commons-logging&#xff0c;slf4j&#xff0c;java.util.logging。 还有更多的东西–时不时有人决定编写自己的记录器–…

Cocos2d-x 3.2 Lua演示样例FontTest(字体測试)

Cocos2d-x 3.2 Lua演示样例FontTest&#xff08;字体測试&#xff09;本篇博客介绍Cocos2d-x 3.2中Lua測试项目中的FontTest样例&#xff0c;主要使用了字体文件来创建我们想要的字体样式&#xff1a;第一个參数为文本。第二參数为ttf字体文件&#xff0c;第三个參数为字体大小…

CSDN挑战编程——《绝对值最小》

绝对值最小 题目详情: 给你一个数组A[n],请你计算出ansmin(|A[i]A[j]|)(0<i,j<n). 例如&#xff1a;A{1&#xff0c; 4&#xff0c; -3}&#xff0c; 则&#xff1a; |A[0] A[0]| |1 1| 2. |A[0] A[1]| |1 4| 5. |A[0] A[2]| |1 (-3)| 2. |A[1] A[1]| |4 …

linux上安装memcached步骤

libevent: http://libevent.org/ 服务器端&#xff1a;https://code.google.com/archive/p/memcached/downloads 客户端&#xff1a; http://pecl.php.net/package/memcache 和 http://pecl.php.net/package/memcached 二选一 http://chenzhou123520.iteye.com/blog/1…

IPC之SystemV

svipc - System V interprocess communication mechanisms linux实现的System V interprocess communication (IPC)机制包含消息队列&#xff08;message queues&#xff09;&#xff0c;信号集&#xff08;semaphore sets&#xff09;&#xff0c;和共享内存&#xff08;share…

oracle create user

sqlplus /nolog conn sys/pw123456orcl as sysdba CREATE USER zengwenfeng IDENTIFIED BY zengwenfeng ; GRANT ALL PRIVILEGES TO zengwenfeng ; COMMIT; C:\Users\Administrator>sqlplus /nologSQL*Plus: Release 11.2.0.1.0 Production on 星期日 12月 24 21:38:24 20…

具有GlassFish和一致性的高性能JPA –第2部分

在我的四部分系列的第二部分中&#xff0c;我将解释将Coherence与EclipseLink和GlassFish一起使用的策略第一。这描述了配置Coherence的JPA支持的Cache所必须采取的步骤&#xff0c;以及如何在GlassFish中使用它。高性能数据存储。 一般的做法 您可以将Coherence API与通过JPA映…

arm板telnetd为什么运行不了_一种基于ARM的嵌入式系统开发的方案详细讲解

背景介绍在日益信息化的社会中&#xff0c;各种各样的嵌入式系统已经全面渗透到日常生活的每一个角落。嵌入式系统的功能越来越复杂&#xff0c;这就使得一个嵌入式系统产品从市场需求立项到方案选择、样机研制、定型量产所需要的开发费用越来越多&#xff0c;所需开发时间越来…

反素数 -- 数学

反素数就是区间内约数个数最多的那个数。 在ACM题目里&#xff0c; 一般是求约数最多而且数字最小的那个数&#xff0c;【1--n】 二是求约数刚好等于n的最小的那个数 三是求区间里的最小反素数【beign&#xff0c;end】 1和3有区别吗&#xff1f;有&#xff0c;1可以加速&#…

编程挑战系统的输入和输出详细说明

在高校俱乐部线上编程挑战中&#xff0c;一道题目的所有测试数据是放在一个文本文件中&#xff0c;选手将一道题目的程序提交给评判系统运行&#xff0c;程序从该文件中读取测试数据&#xff0c;再把运行结果输出到另一个文本文件中。系统把输出文件与标准答案比对&#xff0c;…

上传文件---未能找到路径“D:\MyProject\Files\”的一部分

C# 使用控件FileUpload 上传文件&#xff0c;简单实例&#xff1a; protected void btnUpload_Click(object sender, EventArgs e){string path Server.MapPath("~/Files/");if (fileUpload.HasFile true){string filename fileUpload.FileName.ToLower();fileUpl…

使用SPANN方式将Spring&Quartz与自定义注释集成

在上一篇文章中 &#xff0c;我们演示了如何在Spring容器中创建和配置带批注的Quartz作业。 我们使用了一个类级别的注释将一些元数据添加到实现Quartz Job的bean中。 批注定义了作业的名称&#xff0c;组及其cron表达式。 后来&#xff0c;大部分代码专用于处理该批注&#xf…

python opencv旋转_Python opencv实现与rotatedrect类似的矩形旋转,pythonopencv,RotatedRect

本文原理&#xff1a;先旋转矩形到指定角度&#xff0c;然后提取矩形外轮廓&#xff0c;从而获取旋转后的矩形坐标点。#&#xff01;/usr/bin/env python3# -*- coding: utf-8 -*-# Author: tcy# Date: 2020-5-2 21:00:53# Version:V1.01# Last Modified by: tcy shanghai song…

关于string转整数

又是leetcode的easy级别题&#xff0c;很基本的题目&#xff0c;却漏考虑很多情况&#xff0c;动手前一定要考虑清楚呀&#xff01;&#xff01;&#xff01; 就当做锻炼写作能力吧&#xff0c;先上题目&#xff01; 将文本转换成整数&#xff0c;注意一下几点&#xff1a; 1.文…

数字三角形——递归、递推、记忆化搜索

数字三角形 描述: 有一个由非负整数组成的三角形&#xff0c;第一行只有一个数&#xff0c;除了最下行之外每个数的左下方和右下方各有一个数。 问题&#xff1a; 从第一行的数开始&#xff0c;每次可以往左下或右下走一格&#xff0c;直到走到最下行…

Java 7功能概述

前面我们讨论了所有未纳入Java 7的内容&#xff0c;然后回顾了将其纳入Java 7的有用的Fork / Join框架 。 今天的帖子将带我们了解Project Coin的每个功能-一系列小的语言增强功能&#xff0c;这些功能虽然不是开创性的&#xff0c;但是对于任何能够使用JDK 7的开发人员来说都是…