`
xiaoshan5634
  • 浏览: 74002 次
  • 性别: Icon_minigender_1
  • 来自: 东莞
社区版块
存档分类
最新评论

创建包含内嵌图片的邮件

阅读更多

邮件可以抽象为信封、邮件和邮件体。

 

RFC822文档规定了如何编写一封简单邮件
邮件头和邮件体,两者使用空行分隔
邮件头
from字段
to字段
subject字段
ccbcc字段
邮件体
邮件内容
冒充邮箱,编写欺骗邮件

 

MIME协议规定了如何编写一封复杂邮件,MIME协议是对RFC822文档的升级和补充。
对于包含不同类型数据的复杂邮件,MIME协议对不同数据进行分隔,并使用Content-Type头字段描述数据类型、以及不同数据之间的关系。
数据类型
主类型/子类型的形式出现,主类型有textimageaudiovideoapplicationmultipartmessage等,分别表示文本、图片、音频、视频、应用程序、组合结构、消息等。每个主类型下面都有多个子类型,例如text主类型包plainhtmlxmlcss等子类型。
数据的关系
multipart/mixedmultipart/relatedmultipart/alternative   MIME协议描述的邮件称之为MIME邮件,MIME协议描述的数据也称之为MIME消息。
Content-Disposition头字段
Content-Disposition头字段用于指定邮件阅读程序处理数据内容的方式,有inlineattachment两种标准方式,inline表示直接处理,而attachment表示当作附件处理。如果将Content-Disposition设置为attachment,在其后还可以指定filename属性,如下所示:

Content-Disposition: attachment; filename=“1.bmp”
上面的MIME头字段表示MIME消息体的内容为邮件附件,附件名1.bmpContent-ID头字段
Content-ID头字段用于为multipart/related组合消息中的内嵌资源指定一个唯一标识号,在HTML格式的正文中可以使用这个唯一标识号来引用该内嵌资源。例如,假设将一个表示内嵌图片的MIME消息的Content-ID
头字段设置为如下形式:
Content-ID: it315logo_gif
那么,在HTML正文中就需要使用如下HTML语句来引用该图片资源:
<img src="cid:it315logo_gif">
注意,在引用Content-ID头字段标识的内嵌资源时,要在资源的唯一标识号前面加上cid:,以说明要采用唯一标识号对资源进行引用。
 
JavaMail API按其功能划分通常可分为如下三大类:
创建和解析邮件内容的API Message是创建和解析邮件的核心API,它的实例对象代表一封电子邮件。
发送邮件的APITransport是发送邮件的核心API类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如SMTP协议。
接收邮件的APIStore是接收邮件的核心API类,它的实例对象代表实现了某个邮件接收协议的邮件接收对象,例如POP3协议。
Session
Session类用于定义整个应用程序所需的环境信息,以及收集客户端与邮件服务器建立网络连接的会话信息,如邮件服务器的主机名、端口号、采用的邮件发送和接收协议等。Session对象根据这些信息构建用于邮件收发的TransportStore对象,以及为客户端创建Message对象时提供信息支持。

 

public String[] sendHtmlWithImg(String subject, String htmlText, ArrayList imgs, String[] mails) {
		String[] result = {"", ""};		
		Session session = null;
		Message message = null;
		MimeMultipart multipart = null;
		Transport transport = null;
		props = new Properties();
		//props.put("mail.transpost.protocol", "smtp");
		props.put("mail.smtp.port", "25");
		props.put("mail.smtp.auth", "false");
		try
		{
			session = Session.getDefaultInstance(props, null);
			session.setDebug(false);
			message = new MimeMessage(session);
			message.setSubject(subject);
			String[] tempArray = mails[0].split("`");
			String fromMail = tempArray[0];
			String fromPerson = tempArray[1];
			String feedback = tempArray[2];
			message.setFrom(new InternetAddress(fromMail, fromPerson));
			//是否要求回执
			if(feedback.equals("on.")) {
				message.setHeader("Disposition-Notification-To", fromMail);
			}
			tempArray = mails[1].split(";");			
			for(int i=0;i<tempArray.length;i++) {
				if (tempArray[i].length()<=3 || tempArray[i].indexOf("@")==-1)
				{
					continue;
				}
				message.addRecipient(Message.RecipientType.TO,   
					new InternetAddress(tempArray[i]));
			}
			tempArray = mails[2].split(";");			
			for(int i=0;i<tempArray.length;i++) {
				if (tempArray[i].length()<=3 || tempArray[i].indexOf("@")==-1)
				{
					continue;
				}
				message.addRecipient(Message.RecipientType.CC,   
					new InternetAddress(tempArray[i]));
			}
			tempArray = mails[3].split(";");			
			for(int i=0;i<tempArray.length;i++) {
				if (tempArray[i].length()<=3 || tempArray[i].indexOf("@")==-1)
				{
					continue;
				}
				message.addRecipient(Message.RecipientType.BCC,   
					new InternetAddress(tempArray[i]));
			}

			BodyPart messageBodyPart = new MimeBodyPart();
			messageBodyPart.setContent(htmlText, "text/html;charset=GBK");
			multipart = new MimeMultipart("related");
			multipart.addBodyPart(messageBodyPart);
			result[0] = "ok";
			for(int i=0;i<imgs.size();i++) {
				String[] temp = (String[])imgs.get(i);
				String f = temp[0];
				if (new File(f).exists())
				{
					try{
						DataSource fds = new FileDataSource(f);
						messageBodyPart = new MimeBodyPart();
						messageBodyPart.setDataHandler(new DataHandler(fds));
						messageBodyPart.setHeader("Content-ID","<"+temp[1]+">");
						multipart.addBodyPart(messageBodyPart);	
					} catch (Exception e) {
						System.out.println(e);
						result[0] = "no";
						result[1] = ("未知错误!"+e.getMessage()).replaceAll("\r", "").replaceAll("\n", "").replaceAll("'", "  ");
						break;
					}
				}
				else {
					result[1] = ("系统找不到指定的文件:"+f).replaceAll("\r", "  ").replaceAll("\n", "  ").replaceAll("'", "  ");
				}
			}
			message.setContent(multipart);
			message.saveChanges();
			transport = session.getTransport("smtp");
			transport.connect(currentMailServer, null, null);
			transport.sendMessage(message, message.getAllRecipients());
			transport.close();
		} catch (AddressException e) {
			System.out.println(e);
			result[0] = "no";
			result[1] = ("无效邮件地址!"+e.getMessage()).replaceAll("\r", "").replaceAll("\n", "").replaceAll("'", "  ");
		} catch (MessagingException e) {
			System.out.println(e);
			currentMailServer = MAIL_SMTP_HOST[1];
			try {
				transport.connect(currentMailServer, null, null);
				transport.sendMessage(message, message.getAllRecipients());
				transport.close();
				result[0] = "ok";
			}
			catch (MessagingException ex) {
				System.out.println(ex);
				currentMailServer = MAIL_SMTP_HOST[2];
				try {
					transport.connect(currentMailServer, null, null);
					transport.sendMessage(message, message.getAllRecipients());
					transport.close();
					result[0] = "ok";
				}
				catch (Exception ex2) {
					System.out.println(ex2);
					result[0] = "no";
					result[1] = "邮件服务器繁忙,请稍候再试!";
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
			result[0] = "no";
			result[1] = ("未知错误!"+e.getMessage()).replaceAll("\r", "").replaceAll("\n", "").replaceAll("'", "  ");
		}
		multipart = null;
		message = null;
		session = null;
		transport = null;
		//System.out.println("currentMailServer="+currentMailServer);
		return result;
	}

 

 

分享到:
评论

相关推荐

    发送内嵌图片邮件的正确方法

    string body = @"这是一封包含内嵌图片的邮件&lt;/h1&gt;&lt;br /&gt; &lt;img src='cid:MyPic' /&gt;&lt;br /&gt; 点击在新窗口打开图片&lt;/a&gt;"; mail.Body = body; // 创建图片附件 Attachment attachment = new Attachment(@"C:\path...

    JavaMail入门教程之创建邮件(2)

    在更复杂的场景下,如果邮件需要包含内嵌资源或附件,可以使用`MimeBodyPart`和`MimeMultipart`类。`MimeBodyPart`代表邮件的一个MIME消息,可以封装文本、图片、文件等。`MimeMultipart`则可以组合多个`...

    spring整合freemarker发送邮件例子

    这个服务能够发送HTML格式的邮件,其中包含内嵌的图片,并且能够处理附件,同时解决字符编码可能导致的乱码问题。以下是详细的知识点讲解: 1. **Spring Framework**:Spring 是一个广泛使用的 Java 应用开发框架,...

    VB编写邮件发送案例

    在压缩包文件`MAPI`中,可能包含了一些关于如何利用MAPI接口的更详细资料,比如如何处理邮件的其他复杂属性,或者如何处理多邮件的批量操作等。这些内容可能涉及到更底层的MAPI接口使用,对开发者来说,理解和使用...

    Java程序中使用JavaMail发送带图片和附件的邮件

    2. **创建正文**:为了创建包含图片的 HTML 正文,我们需要创建一个 `MimeBodyPart` 来存储 HTML 内容,然后创建一个 `MimeMultipart("related")`,将 HTML 和图片关联在一起。`"related"` 参数指示这些部分是相关的...

    javamail 邮件发送支持带有图片的html格式和普通文本格式

    - 使用 `MimeMessage` 类可以创建包含多种类型内容的消息体。 3. **添加附件和内嵌资源** - JavaMail 支持在邮件中添加附件,并能将图片等资源嵌入到 HTML 内容中,实现富文本展示。 4. **处理 HTML 内容** - ...

    outlookattachviewv1.21内嵌工具

    2. **预览附件**:用户无需打开原始邮件,即可通过OutlookAttachView预览内嵌附件的详细信息,如文件类型、大小、创建日期等,这对于快速查找和评估附件内容非常有帮助。 3. **导出附件**:OutlookAttachView允许...

    写java程序实现发邮件功能

    本篇文章将深入探讨如何使用Java编写程序来实现邮件的发送,包括发送纯文本邮件、带有附件的邮件、包含图片的邮件以及在邮件中显示图片。 首先,我们得知道JavaMail API是实现邮件发送功能的关键库。它提供了一系列...

    javamail收发邮件(带附件,正文带图).docx

    // 创建包含内嵌图片的邮件正文 MimeBodyPart messageBodyImagePart = new MimeBodyPart(); // 假设图片资源为:C:\image\example.jpg DataSource fds = new FileDataSource("C:\\image\\example.jpg"); ...

    C#发送内置图片html格式邮件的方法

    这个方法不仅适用于发送简单的内嵌图片,还可以扩展到包含多个图片、链接和其他富媒体内容的复杂邮件。请注意,实际应用中需要根据你的SMTP服务器配置进行相应的调整,例如设置用户名、密码、端口等信息。此外,为了...

    vue邮件系统

    在Vue邮件系统中,开发者可以学习到如何创建、组织和管理Vue组件,这些组件可以代表邮件列表、单个邮件、发送表单等不同的界面元素。通过组件化,项目代码变得模块化,易于理解和维护。 Vue Router是Vue.js官方的...

    Node.js-email-templates用于在Node.js中创建预览和发送自定义电子邮件模板

    2. **自动内嵌CSS**:为了解决CSS在邮件客户端中可能遇到的兼容性问题,`email-templates`支持自动将CSS内联到HTML元素中,确保邮件在各种阅读器中的显示效果一致。 3. **样式表与嵌入图像**:除了内联CSS,该库还...

    Spring进阶—如何用Java代码实现邮件发送

    总结来说,Spring框架为Java应用程序提供了强大且灵活的邮件发送功能,无论是简单的文本邮件还是复杂的HTML邮件,甚至是包含附件和内嵌资源的邮件,都能通过其高级抽象层轻松实现。同时,配合模板引擎,可以有效地...

    java发送电子邮件代码

    - 类似于HTML邮件的创建过程,但额外支持内嵌资源(如图片),这通常用于邮件中的图片不会作为附件而是直接显示在邮件正文中。 - 需要在`MimeMessageHelper`中使用`addInline`方法添加内嵌资源。 #### 四、扩展...

    邮件的收发.pptx

    - **目的**:生成包含文本、附件和内嵌图片的复杂邮件。 ##### 发送邮件 - **核心类**:`javax.mail.Transport` 类。 - **步骤**: - 创建 `Session` 对象,包含邮件服务器的网络连接信息。 - 创建 `Message` ...

    完美JavaMail+redis完成邮件发送和邮箱认证

    JavaMail允许开发者自定义邮件的MIME类型,因此可以创建一个包含内嵌图片的MIMEMessage,并使用MimeBodyPart来添加这些资源。 接下来,我们谈谈如何结合Redis。Redis是一个内存数据存储系统,可以作为数据库、缓存...

    outlook删除重复邮件亲测有效

    "outlook删除重复邮件宏代码.txt"文件很可能包含了这样的宏代码,它能帮助用户自定义一个过程,自动扫描并删除指定文件夹中的重复邮件。 宏的使用通常涉及到VBA(Visual Basic for Applications),这是Microsoft ...

Global site tag (gtag.js) - Google Analytics