************本人水平有限,在学习时请用批判的态度学习,有问题给我留言************
前几天听的方立勋方老师javamail的课程,今天把代码详细注解写一下,加深一下印象,方老师不愧是对邮件发送有深入研究,讲了很多相关的知识,今天也一并记录下来。
方老师讲解javamail之前详细讲解了邮件发送的原理,这里我记录一下用telnet发送邮件的方法。
第一步和邮件服务器打招呼:
Ehlo 主机名(你的计算机名可以随意填写)
Auth login 登陆命令(回车后提示你输入用户名密码)
输入用户名(注意需要时base64编码过的用户名,可以用new sun.misc.BASE64Encoder()).encode( s.getBytes())转码
密码同用户名
Mail from:<你的邮件地址>
Rcpt to:<你发送的邮件地址>
Data(回车后输入正文)
.(结束正文输入)
Quit(结束邮件发送)
邮件中可以加入发送人的地址,可以和mail from中的不一样,也就是说你可以不用知道别人邮箱的密码就用别人的邮箱发送邮件了!!!
邮件服务器搭建
安装邮件服务器 在dns上注册A记录 mx记录
A记录是你的服务器给对方服务器发送邮件时对方服务器会查询的记录,如果记录上有你的邮件服务器的地址,对方将不会要求你输入用户名密码
Mx记录是对方服务器给你的服务器发送邮件是需要查询的记录,如果对方能在dns上查询到你的记录则给你发送邮件,如果查询不到则不发送。
Javamail邮件发送程序详解
package cn.itcast;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
/**
* 邮件发送
* 详尽注释每一步做法和含义,方便大家学习
*
* @version 1.0
* @note caohua
* @company 传智博客
*/
public class ComplexMail {
public static void main(String[] args) throws Exception {
Properties prop = new Properties();//得到一个properties的实例 得到session的时候要用到
prop.put("mail.transport.protocol", "smtp");//协议
prop.put("mail.smtp.auth", "true");//是否用户登录 否的话就是邮件服务器之间的发送..........................?
//注意:这个session 不是 httpsession 更不是hibernate的session 这个事javamail api中的session 基本邮件会话
Session session = Session.getDefaultInstance(prop);//用Session类的一个静态方法得到session的实例
session.setDebug(true);//在控制台打印出和邮件服务器的交互过程
Transport transport = session.getTransport();//得到一个Transport的实例 这个类是一个抽象类,我们可以使用这个类的静态方法send()来发送消息
transport.connect("smtp.sina.com","caohua_1012", "9831012");
Message message = createMessage(session);//得到有内容的Message实例 内容的填充时调用createMessage方法
//InternetAddress是一个继承了Address接口的类
InternetAddress[] ia = new InternetAddress[]{new InternetAddress("caohua_1012@sina.com")};//得到一个地址数组
transport.sendMessage(message,ia);//发送邮件的方法需要两个参数 一个是内容类(Message)的实例 一个是地址数组(会发送给多个人所以是数组)
transport.close();//关闭通信
}
/**
* 填充Message类的内容
* @param session
* @return Message
* @throws Exception
*/
private static Message createMessage(Session session) throws Exception {
MimeMessage message = new MimeMessage(session);//得到一个message对象
message.setFrom(new InternetAddress("caohua_1012@sina.com"));//设置发件人
message.setRecipient(Message.RecipientType.TO, new InternetAddress("caohua_1012@sina.com"));//设置收件人
message.setSubject("javamail测试邮件");//邮件主题
/** 代表正文的bodypart
* <img src=cid:logo.gif>的调用方法是 cid:logo.gif在图片的bodypart定义类型时定义 在邮件正文的bodypart中需要这样调用 如果不调用则按照附件来处理
**/
MimeBodyPart text = new MimeBodyPart();//得到一个正文bodypart的实例
text.setContent("<html> 我是一个码农!!!<img src=cid:logo.gif>码农祖师爷的神像</html>", "text/html;charset=gb2312");//set内容 及返回的内容的contenttype
/** 代表正文所引用的图片的bodypart **/
MimeBodyPart image = new MimeBodyPart();//得到一个图片的bodypart实例
DataHandler dh1 = new DataHandler(new FileDataSource("E:\\aa.jpg"));//一种数据类型的处理类 初始化需要传入一个数据源
image.setDataHandler(dh1);//放入多媒体数据
image.setContentID("logo.gif");//定义正文内容引用id
/** 代表附件的bodypart **/
MimeBodyPart attach = new MimeBodyPart();//得到一个附件的bodypart类
DataHandler dh2 = new DataHandler(new FileDataSource("E:\\10635324.jpg"));//一种数据类型的处理类 初始化需要传入一个数据源
attach.setDataHandler(dh2);//放入多媒体数据
attach.setFileName(MimeUtility.encodeText(dh2.getName())); //要对中文文件名进行编码!!!
MimeMultipart text_image = new MimeMultipart();//数据容器 正文中有文本 + 图片需要先放到这个类中 然后再把这个类放入到 一个新的bodypart类中
text_image.addBodyPart(text);//将文本放入数据容器中
text_image.addBodyPart(image);//将图片放入数据容器中
text_image.setSubType("related");//设置数据容器类型 mixed(没关系) related(调用关系) alternative
MimeBodyPart text_image_body = new MimeBodyPart();//得到一个新的bodypart
text_image_body.setContent(text_image);//把数据容器放入新的bodypart中
/** 封装了所有邮件数据的容器 **/
MimeMultipart multipart = new MimeMultipart();//将附件 正文+图片的数据容器 合并放入这个数据容器
multipart.addBodyPart(text_image_body);//放入正文+图片的数据容器
multipart.addBodyPart(attach);//放入附件
multipart.setSubType("mixed");//设置混合类型
message.setContent(multipart);//将数据容器放入message类
message.saveChanges();//保存修改
return message;
}
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/chpublish1012/archive/2009/07/04/4322304.aspx
分享到:
相关推荐
"常规JavaMail 邮件发送实用类"标题所指的,通常是一个自定义的Java类,封装了JavaMail API的基本操作,使得邮件发送变得更加简单和便捷。这类实用类一般包含配置SMTP服务器、设置邮件内容、添加附件等功能。 ...
2. `javax.mail.Transport`:用于实际的邮件发送,与邮件服务器进行通信。 3. `javax.mail.Message`:表示一个邮件对象,包含邮件的所有信息,如发件人、收件人、主题、正文等。 4. `javax.mail.internet....
在使用JavaMail进行邮件发送的过程中,可能会遇到以下几种常见问题:发送成功但收件方未收到邮件、邮件收到后无主题或无收件人信息以及邮件内容出现乱码等情况。本文将详细探讨这些问题的原因及相应的解决方案。 ##...
JavaMail邮件发送工具类是Java开发中用于发送电子邮件的标准库,它提供了丰富的API来处理复杂的邮件功能。在JavaMail中,我们可以通过创建特定的类和对象来实现邮件的发送。以下将详细介绍这些类以及如何使用它们。 ...
JavaMail邮件发送Demo是Java开发中用于实现电子邮件发送的一个实例,它依赖于两个关键的库:activation.jar和mail.jar。这两个库提供了JavaMail API,使得Java开发者能够方便地与各种邮件服务器进行交互,完成邮件的...
2. **获取Session对象**:使用`Properties`对象创建一个`Session`实例,它是邮件会话的容器,可以存储邮件发送的配置信息。 3. **创建Message对象**:通过`Session`对象创建一个`Message`实例,这代表了你要发送的...
JavaMail邮件发送源码是Java开发中用于发送电子邮件的一个库,它提供了丰富的API来处理SMTP、POP3和IMAP等邮件协议。这个简单的javamail实例表明,开发者已经成功地测试了邮件发送功能,确保其在实际应用中可以正常...
JavaMail邮件发送实例是Java开发中常见的一个应用场景,主要用于实现程序自动发送电子邮件的功能。这个实例可以帮助开发者理解如何使用JavaMail API来构建邮件服务。在JavaMail API中,我们可以使用MimeMessage类...
【javamail邮件发送项目】是一个基于Java技术的邮件发送解决方案,主要利用Spring框架进行配置,结合FreeMarker(FTL)模板技术实现邮件内容的动态生成,并具备异步发送及批量处理邮件的能力,最多可同时处理1000份...
JavaMail是一种广泛使用的Java库,用于在应用程序中发送电子邮件。这个标题"JavaMail发送...同时,对于企业级应用,通常会使用邮件服务提供商如SendGrid、Mailgun等,它们提供了更稳定、安全且易于管理的邮件发送服务。
这个类称为 MailInfo,包含了邮件的各种信息,例如邮件服务器的主机名和端口号、邮件发送者的地址、邮件接收者的地址、邮件主题、邮件内容、邮件附件等。 在 MailInfo 类中,我们定义了多个成员变量,用于存储邮件...
JavaMail 是一个开源的 Java 库,用于处理电子邮件的发送和接收。它提供了一组 API,使得开发者可以方便地在 Java 应用...请确保遵循你的邮件服务提供商的政策,并注意不要滥用邮件发送服务,以免被标记为垃圾邮件。
2. **创建邮件发送函数**: 创建一个方法来使用 JavaMail 发送邮件。这通常包括配置 SMTP 服务器信息,创建 `Session` 对象,以及构建 `MimeMessage` 实例。 ```java import javax.mail.*; import javax.mail....
这个“javamail邮件发送接收测试”是开发者在学习过程中创建的一个测试项目,旨在帮助理解和实践 JavaMail 的核心功能。通过这个项目,我们可以深入理解如何使用 JavaMail API 来实现邮件的发送和接收。 JavaMail ...
JavaMail邮件发送(带附件)
JavaMail 是一个强大的开源库,用于在Java应用程序中发送和接收电子邮件。这个功能通常涉及到SMTP(简单邮件...在使用JavaMail时,了解并掌握这些基础知识是至关重要的,可以帮助开发者构建稳定、可靠的邮件发送功能。
JavaMail 是一个开源库,用于在Java应用程序中发送和接收电子邮件。这个库提供了一组API,使得开发者可以方便地处理SMTP、POP3、IMAP等邮件协议。在本篇文章中,我们将深入探讨如何使用JavaMail API来实现邮件的发送...
在`test.java`文件中,你可以看到这些步骤的实现,通过运行该文件进行邮件发送的测试。请注意,为了安全起见,实际应用中不应硬编码敏感信息如用户名和密码,而应使用环境变量或配置文件。 总的来说,JavaMail提供...
JavaMail 是一个强大的开源库,用于在Java应用程序中发送和接收电子邮件。这个“javamail发送邮件.zip”压缩包显然包含了一个示例项目,演示如何使用JavaMail API发送包含正文文本、图片以及附件的邮件。以下是对这...
在本篇文章中,我们将深入探讨如何利用Spring来实现JavaMail邮件发送,以及在实际应用中需要注意的关键点。 首先,我们需要理解JavaMail API的基础概念。JavaMail是一个用于处理邮件的开放源码API,它允许开发者...