java发送邮件及邮件附件代码实例
- 格式:doc
- 大小:75.50 KB
- 文档页数:22
今天做了一个java发送邮件的小例子,总结一下,愿意和大家交换意见。
相关内容:1、要有两个邮箱(一个发送邮件,一个接收邮件)2、下载两个jar包(mail-1.4.1.jar,activation-1.1.1.jar)3、编写一个发送邮件的类(SendMail)原理:程序利用发送邮件的账号(这里是a123456@和密码999999)去登录邮箱服务器(这里是)。
之后向另外一个邮箱(这里是123456@)发送一个邮件,邮件的标题和内容等可以在程序里面设定好以下代码可以正确运行且发送邮件。
注意修改两个邮箱地址import java.util.Properties;import javax.mail.BodyPart;import javax.mail.Message;import javax.mail.Multipart;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;public class SendMail {private String host= ""; // smtp服务器 ,这里是网易126 邮箱服务器地址private String user = "a123456"; // 用户名,即发送邮件邮箱(a123456@)的名称private String pwd= "999999"; // 密码,a123456@ 在 的登录密码private String from = "a123456@"; // 发件人地址private String to = "123456@"; // 收件人地址private String subject = "hello"; // 邮件标题public void setAddress(String from, String to, String subject) { this.from = from;this.to = to;this.subject = subject;}/***此方法可以不做修改,直接调用*@param txt*/public void send(String txt) {Properties props = new Properties();// 设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器)props.put("mail.smtp.host", host);// 需要经过授权,也就是有户名和密码的校验,这样才能通过验证(一定要有这一条)props.put("mail.smtp.auth", "true");// 用刚刚设置好的props对象构建一个sessionSession session = Session.getDefaultInstance(props);// 有了这句便可以在发送邮件的过程中在console处显示过程信息,供调试使// 用(你可以在控制台(console)上看到发送邮件的过程)session.setDebug(true);// 用session为参数定义消息对象MimeMessage message = new MimeMessage(session);try {// 加载发件人地址message.setFrom(new InternetAddress(from));// 加载收件人地址message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));// 加载标题message.setSubject(subject);// 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件 Multipart multipart = new MimeMultipart();// 设置邮件的文本内容BodyPart contentPart = new MimeBodyPart();contentPart.setText(txt);multipart.addBodyPart(contentPart);// 添加附件//BodyPart messageBodyPart = new MimeBodyPart();//DataSource source = new FileDataSource(affix);// 添加附件的内容//messageBodyPart.setDataHandler(newDataHandler(source));// 添加附件的标题// 这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码//sun.misc.BASE64Encoder enc = newsun.misc.BASE64Encoder();//messageBodyPart.setFileName("=?GBK?B?"+enc.encode(affixName.getBytes()) + "?=");//multipart.addBodyPart(messageBodyPart);// 将multipart对象放到message中message.setContent(multipart);// 保存邮件message.saveChanges();// 发送邮件Transport transport = session.getTransport("smtp");// 连接服务器的邮箱transport.connect(host, user, pwd);// 把邮件发送出去transport.sendMessage(message,message.getAllRecipients());transport.close();} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {SendMail cn = new SendMail();// 设置发件人地址、收件人地址和邮件标题cn.setAddress("a123456@", "123456@", "helloss");cn.send("hello余云峰");}}注意会出现:1、如果出现Exception in thread "main" ng.NoClassDefFoundError:com/sun/mail/util/BASE64EncoderStream解决办法:下载mail.jar包,添加到lib里就可以了~2、如果你用myEclipse进行开发的话,运行时可能会出现以下的错误:Exception in thread "main" ng.NoClassDefFoundError:com/sun/mail/util/LineInputStream解决方法:移除myEclipse自带的Java EE 5 Libraries包。
Java实现发送邮件并携带附件本⽂实例为⼤家分享了Java实现发送邮件并携带附件的具体代码,供⼤家参考,具体内容如下⼀、邮件服务器与传输协议要在⽹络上实现邮件功能,必须要有专门的邮件服务器。
主要负责接收⽤户投递过来的邮件,并把邮件投递到邮件接收者的电⼦邮箱中。
SMTP服务器地址:⼀般是 ,163邮箱是,qq邮箱是。
SMTP协议通常把处理⽤户smtp请求(邮件发送请求)的服务器称之为SMTP服务器(邮件发送服务器)。
POP3协议通常把处理⽤户pop3请求(邮件接收请求)的服务器称之为POP3服务器(邮件接收服务器)。
⼆、在发送⼈邮箱中开启POP3/SMTP服务qq邮箱登录qq邮箱后→设置→账户→ POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务→ POP3/SMTP服务点击开启(需要绑定⼿机号发送验证短信)→获得了⼀串授权码(后续发送邮件需要)163邮箱登录163邮箱→设置→ POP3/SMTP/IMAP → POP3/SMTP服务点击开启(需要邮箱app认证)→获取到⼀串授权码三、导⼊依赖<dependency><groupId>javax.mail</groupId><artifactId>mail</artifactId><version>1.5.0-b01</version></dependency>四、编写⼯具类import lombok.extern.slf4j.Slf4j;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.Session;import javax.mail.Transport;import javax.mail.internet.*;import java.util.Date;import java.util.Properties;@Slf4jpublic class EmailUtils {public static final String SenderEmail = "xxxxx@";//发送⼈邮箱public static final String senderCode = "ixxxxxxxxxxxdcd";//发送⼈邮箱授权码public static final String emailSMTPHost = "";//服务器地址public static final String receiveMailAccount = "xxxxx@";//收件⼈邮箱public static final String ccMailAccount = "xxxxx@";//抄送⼈邮箱public static final String bccmailAccount = "xxxxxx@";//密送⼈邮箱/*发送邮件*/public static void sendMail() {try {Properties props = new Properties();props.setProperty("mail.transport.protocol", "smtp");// 使⽤的协议props.setProperty("mail.smtp.host", emailSMTPHost);// 发件⼈的邮箱的SMTP服务器地址props.setProperty("mail.smtp.auth", "true");// 需要请求认证Session session = Session.getInstance(props);//得到会话对象实例session.setDebug(false);//是否打印详细⽇志MimeMessage message = createMimeMessage(session);//获取邮件对象(封装了⼀个⽅法)Transport transport = session.getTransport();transport.connect(SenderEmail, senderCode);//连接发送⼈的邮箱账户// 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件⼈, 抄送⼈, 密送⼈transport.sendMessage(message, message.getAllRecipients());// 7. 关闭连接transport.close();("邮件发送成功");} catch (Exception e) {log.error("发送邮件失败");}}public static MimeMessage createMimeMessage(Session session) throws Exception {// 1. 创建⼀封邮件MimeMessage message = new MimeMessage(session);// 2. From: 发件⼈message.setFrom(new InternetAddress(SenderEmail, "发件⼈", "UTF-8"));// 3. 设置收件⼈、抄送⼈、密送⼈//MimeMessage.RecipientType.TO:收件类型;:抄送类型;MimeMessage.RecipientType.BCC:密送类型 message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMailAccount, "收件⼈", "UTF-8"));message.setRecipient(, new InternetAddress(ccMailAccount, "抄送⼈", "UTF-8"));message.setRecipient(MimeMessage.RecipientType.BCC, new InternetAddress(bccmailAccount, "密送⼈", "UTF-8"));// 4. Subject: 邮件主题message.setSubject("这是邮件的主题", "UTF-8");// 5. Content: 邮件正⽂(可以使⽤html标签)message.setContent("这是邮件正⽂", "text/html;charset=UTF-8");*****************以下部分为携带附件代码,不需要携带附件的可删除星号圈起的部分*************************MimeMultipart multipart = new MimeMultipart();MimeBodyPart file1 = new MimeBodyPart();DataHandler handler = new DataHandler(new FileDataSource("⽂件路径"));file1.setDataHandler(handler);//对⽂件名进⾏编码,防⽌出现乱码String fileName = MimeUtility.encodeWord("⽂件名", "utf-8", "B");file1.setFileName(fileName);multipart.addBodyPart(file1);message.setContent(multipart);*******************************************************************************************// 6. 设置发件时间message.setSentDate(new Date());// 7. 保存设置message.saveChanges();return message;}}五、最后在同时设置正⽂和附件时,导致发送邮件后正⽂不显⽰,请⼤佬们指点。
Java实现发送邮件,图⽚,附件1、JavaMail 介绍JavaMail 是sun公司(现以被甲⾻⽂收购)为⽅便Java开发⼈员在应⽤程序中实现邮件发送和接收功能⽽提供的⼀套标准开发包,它⽀持⼀些常⽤的邮件协议,如前⾯所讲的SMTP,POP3,IMAP,还有MIME等。
我们在使⽤JavaMail API 编写邮件时,⽆须考虑邮件的底层实现细节,只要调⽤JavaMail 开发包中相应的API类就可以了。
JavaMail 下载地址:2、JavaMail APIJavaMail API 按照功能可以划分为如下三⼤类:①、创建和解析邮件的API②、发送邮件的API③、接收邮件的API以上三种类型的API在JavaMail 中由多个类组成,但是主要有四个核⼼类,我们在编写程序时,记住这四个核⼼类,就很容易编写出Java邮件处理程序。
Message 类:javax.mail.Message 类是创建和解析邮件的核⼼ API,这是⼀个抽象类,通常使⽤它的⼦类javax.mail.internet.MimeMessage 类。
它的实例对象表⽰⼀份电⼦邮件。
客户端程序发送邮件时,⾸先使⽤创建邮件的 JavaMail API 创建出封装了邮件数据的 Message 对象,然后把这个对象传递给邮件发送API(Transport 类)发送。
客户端程序接收邮件时,邮件接收API把接收到的邮件数据封装在Message 类的实例中,客户端程序在使⽤邮件解析API从这个对象中解析收到的邮件数据。
Transport 类:javax.mail.Transport 类是发送邮件的核⼼API 类,它的实例对象代表实现了某个邮件发送协议的邮件发送对象,例如 SMTP 协议,客户端程序创建好Message 对象后,只需要使⽤邮件发送API 得到 Transport 对象,然后把 Message 对象传递给 Transport 对象,并调⽤它的发送⽅法,就可以把邮件发送给指定的 SMTP 服务器。
使用Java应用程序发送E-mail 十分简单,但是首先你应该在你的机器上安装JavaMail API 和Java Activation Framework (JAF) 。
您可以从Java 网站下载最新版本的JavaMail,打开网页右侧有个Downloads 链接,点击它下载。
您可以从Java 网站下载最新版本的JAF(版本1.1.1)。
你也可以使用本站提供的下载链接:JavaMail mail.jar 1.4.5JAF(版本1.1.1)activation.jar下载并解压缩这些文件,在新创建的顶层目录中,您会发现这两个应用程序的一些jar 文件。
您需要把mail.jar 和activation.jar 文件添加到您的CLASSPATH 中。
如果你使用第三方邮件服务器如QQ的SMTP服务器,可查看文章底部用户认证完整的实例。
发送一封简单的E-mail下面是一个发送简单E-mail的例子。
假设你的本地主机已经连接到网络。
编译并运行这个程序来发送一封简单的E-mail:如果你想发送一封e-mail给多个收件人,那么使用下面的方法来指定多个收件人ID:下面是对于参数的描述:type:要被设置为TO, CC 或者BCC,这里CC 代表抄送、BCC 代表秘密抄送。
举例:Message.RecipientType.TOaddresses: 这是email ID 的数组。
在指定电子邮件ID 时,你将需要使用InternetAddress() 方法。
发送一封HTML E-mail下面是一个发送HTML E-mail 的例子。
假设你的本地主机已经连接到网络。
和上一个例子很相似,除了我们要使用setContent() 方法来通过第二个参数为"text/html",来设置内容来指定要发送HTML 内容。
编译并运行此程序来发送HTML e-mail:发送带有附件的E-mail下面是一个发送带有附件的E-mail的例子。
hutool mail用法Hutool Mail 详细使用指南简介Hutool Mail 是一个功能强大且易于使用的 Java 邮件发送工具。
它提供了发送简单文本邮件、HTML 邮件以及附件邮件等功能,可以满足各种场景下的邮件发送需求。
用法引入依赖首先,在项目的 `` 文件中添加以下依赖:<dependency><groupId></groupId><artifactId>hutool-mail</artifactId><version></version></dependency>发送简单文本邮件Hutool Mail 可以轻松地发送简单的文本邮件。
以下是发送简单文本邮件的示例代码:// 创建邮件配置MailAccount account = new MailAccount();("");(25);(true);("");("username");("password");// 创建邮件SimpleMail mail = new SimpleMail(account);("Hello Hutool Mail");(true);("This is a simple text email.");// 添加收件人("");// 发送邮件();发送 HTML 邮件Hutool Mail 还支持发送 HTML 邮件,可以发送富文本内容。
以下是发送 HTML 邮件的示例代码:// 创建邮件配置(同上述示例)// 创建邮件HtmlMail mail = new HtmlMail(account);("Hello Hutool Mail");(true);("<h1>This is a HTML email.</h1>");// 添加收件人(同上述示例)// 发送邮件(同上述示例)();发送带附件的邮件如果需要发送带附件的邮件,Hutool Mail 也提供了相应的功能。
1.邮件1.1 邮件组成部分如果是新邮件就获取,并解析它;邮件是由邮件头和邮件体组成,在邮件头中主要包含了收件人、发件人、主题等等基础信息。
而邮件体中就包括了邮件的正文和附件等内容信息。
下图就是pop3协议下,邮件的大致内容。
1.2 发送邮件(带附件、正文带图片)QQ邮箱为例:需要QQ账号和QQ登录第三方客户端时,密码框的“授权码”(相当于密码)授权码如下获取:代码如下:public class JavaMailboxAttachment {private MimeMessage message;private Session session;private String mailHost = "";private String mailAuth = "";private String mailPort = "";private String sender_username = "";private String sender_password = "";//定义一个Properties 用于存放信息private Properties properties = new Properties();//-------------------------------发信箱---------------------------------------------public JavaMailboxAttachment(String email_type) {try {properties.put("mail.smtp.host",""); //发送邮件服务器//端口号,QQ邮箱给出了两个端口,但是另一个我一直使用不了,所以就给出这一个587properties.put("mail.smtp.port", "587"); //发送邮件端口号properties.put("mail.smtp.auth", "true");// 此处填写你的账号properties.put("er", "xxxxxxxxx@");// 此处的密码就是前面说的16位STMP授权码properties.put("mail.password", "xxxxxxxxxxxxxxxx");this.mailHost = properties.getProperty("mail.smtp.host");this.mailAuth = properties.getProperty("mail.smtp.auth");this.mailPort = properties.getProperty("mail.smtp.port");this.sender_username = properties.getProperty("er");this.sender_password = properties.getProperty("mail.password");} catch (Exception e) {e.printStackTrace();}// 构建授权信息,用于进行SMTP进行身份验证Authenticator authenticator = new Authenticator() {protected PasswordAuthentication getPasswordAuthentication() {// 用户名、密码String userName = properties.getProperty("er");String password = properties.getProperty("mail.password");return new PasswordAuthentication(userName, password);}};session = Session.getInstance(properties,authenticator); //用户验证message = new MimeMessage(session); //将验证成功的session信息,创建一个message 对象。
java邮件发送(单⼈,多⼈,抄送,Excel附件) 直接上代码保存吧package com.westvalley.ceiec.page.report.sendmail;import weaver.email.EmailEncoder;import javax.mail.*;import javax.mail.internet.*;import javax.mail.util.ByteArrayDataSource;import javax.activation.*;import mons.logging.Log;import mons.logging.LogFactory;import ermodel.HSSFWorkbook;import crivia.db.i.DataSet;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.InputStream;import java.util.*;/**邮件发送⼯具类* @author whh*/public class Email {Log log = LogFactory.getLog(this.getClass());//发件⼈地址private String mail_from;public void setMail_from(String mailFrom) {mail_from = mailFrom;}public String getMail_from() {return mail_from;}//发件⼈密码private String password;public void setPassword(String password) {this.password = password;}public String getPassword() {return password;}//收件地址private String mail_to;public void setMail_to(String mailTo) {mail_to = mailTo;}public String getMail_to() {return mail_to;}//主题private String title;public void setTitle(String title) {this.title = title;}public String getTitle() {return title;}//内容private String message;public void setMessage(String message) {this.message = message;}public String getMessage() {return message;}//发件⼈邮件服务器如: 191.0.0.6private String send_server;public void setSend_server(String sendServer) {send_server = sendServer;}public String getSend_server() {return send_server;}/** 单个发送 setMail_to(String mailTo)* @return是否正确发送* @throws AddressException*/public boolean SendMail()throws AddressException{try{int n = this.mail_from.indexOf('@');int m = this.mail_from.length();//取邮件的服务器String server = this.mail_from.substring(n+1, m);//建⽴邮件会话Properties pro = new Properties();pro.put("mail.smtp.host", "smtp."+server);pro.put("mail.smtp.auth", "true");Session sess = Session.getInstance(pro);sess.setDebug(true);//新建⼀个消息对象MimeMessage message = new MimeMessage(sess);//设置发件⼈InternetAddress from_address = new InternetAddress(this.mail_from); message.setFrom(from_address);//设置收件⼈InternetAddress to_address = new InternetAddress(this.mail_to);message.setRecipient(Message.RecipientType.TO, to_address);//设置主题message.setSubject(title);//设置内容message.setContent(this.message, "text/html;charset=UTF-8");//设置发送时间message.setSentDate(new Date());//发送邮件message.saveChanges(); //保存邮件信息//设置发送的格式Transport transport = sess.getTransport("smtp");if(this.send_server == null){transport.connect("191.0.0.6", this.mail_from, password);}else{transport.connect(this.send_server, this.mail_from, password);}transport.sendMessage(message, message.getAllRecipients());transport.close();("向"+this.mail_to+"发送邮件成功");return true;}catch(Exception e){("发送邮件失败,原因可能是"+e.toString());return false;}}/**群发* @param addresses 地址list* @return* @throws AddressException*/public boolean SendMail(List<String> addresses) throws AddressException{ try{int n = this.mail_from.indexOf('@');int m = this.mail_from.length();//取邮件的服务器String server = this.mail_from.substring(n+1, m);//建⽴邮件会话Properties pro = new Properties();pro.put("mail.smtp.host", "smtp."+server);pro.put("mail.smtp.auth", "true");Session sess = Session.getInstance(pro);sess.setDebug(true);//新建⼀个消息对象MimeMessage message = new MimeMessage(sess);//设置发件⼈InternetAddress from_address = new InternetAddress(this.mail_from); message.setFrom(from_address);//设置收件⼈,多个final int num = addresses.size();InternetAddress to_address[] = new InternetAddress[num];for(int i=0; i<num; i++){to_address[i] = new InternetAddress(addresses.get(i));}message.setRecipients(Message.RecipientType.TO, to_address);//设置主题message.setSubject(title);//设置内容message.setContent(this.message, "text/html;charset=UTF-8");//设置发送时间message.setSentDate(new Date());//发送邮件message.saveChanges(); //保存邮件信息//设置发送的格式Transport transport = sess.getTransport("smtp");if(this.send_server == null){transport.connect("191.0.0.6", this.mail_from, password);}else{transport.connect(this.send_server, this.mail_from, password);}transport.sendMessage(message, message.getAllRecipients());transport.close();("发送邮件成功");return true;}catch(Exception e){("发送邮件失败,原因可能是"+e.getMessage());return false;}}/** 多⼈发送并抄送增加:2017-04-25 whh* @param addresses 收件邮箱(多个)* @param ccAddresses 抄送邮箱(多个)* @return* @throws AddressException*/public boolean SendMail(List<String> addresses, List<String> ccAddresses) throws AddressException{if(0==ccAddresses.size()){ //20170428 whhreturn SendMail(addresses);}try{int n = this.mail_from.indexOf('@');int m = this.mail_from.length();//取邮件的服务器String server = this.mail_from.substring(n+1, m);//建⽴邮件会话Properties pro = new Properties();pro.put("mail.smtp.host", "smtp."+server);pro.put("mail.smtp.auth", "true");Session sess = Session.getInstance(pro);sess.setDebug(true);//新建⼀个消息对象MimeMessage message = new MimeMessage(sess);//设置发件⼈InternetAddress from_address = new InternetAddress(this.mail_from);message.setFrom(from_address);//设置收件⼈,多个final int num = addresses.size();InternetAddress to_address[] = new InternetAddress[num];for(int i=0; i<num; i++){to_address[i] = new InternetAddress(addresses.get(i));}message.setRecipients(Message.RecipientType.TO, to_address);//设置抄送⼈final int ccSize = ccAddresses.size();if(ccSize > 0){InternetAddress cc_Address[] = new InternetAddress[ccSize];for(int i=0; i<ccSize; i++){cc_Address[i] = new InternetAddress(ccAddresses.get(i));}message.setRecipients(, cc_Address);}//设置主题message.setSubject(title);//设置内容message.setContent(this.message, "text/html;charset=UTF-8");//设置发送时间message.setSentDate(new Date());//发送邮件message.saveChanges(); //保存邮件信息//设置发送的格式Transport transport = sess.getTransport("smtp");if(this.send_server == null){transport.connect("191.0.0.6", this.mail_from, password);}else{transport.connect(this.send_server, this.mail_from, password);}transport.sendMessage(message, message.getAllRecipients());transport.close();("发送邮件成功");return true;}catch(Exception e){("发送邮件失败,原因可能是"+e.getMessage());return false;}}/** 多⼈发送并抄送增加:2019-06-14 whh* @param addresses 收件邮箱(多个)* @param ccAddresses 抄送邮箱(多个)* @param is 附件* @return* @throws AddressException*/public boolean SendMail(List<String> addresses, List<String> ccAddresses,HSSFWorkbook workBook,String workBookName) throwsAddressException{try{int n = this.mail_from.indexOf('@');int m = this.mail_from.length();//取邮件的服务器String server = this.mail_from.substring(n+1, m);//建⽴邮件会话Properties pro = new Properties();pro.put("mail.smtp.host", "smtp."+server);pro.put("mail.smtp.auth", "true");Session sess = Session.getInstance(pro);sess.setDebug(true);//新建⼀个消息对象MimeMessage message = new MimeMessage(sess);//设置发件⼈InternetAddress from_address = new InternetAddress(this.mail_from);message.setFrom(from_address);//设置收件⼈,多个final int num = addresses.size();InternetAddress to_address[] = new InternetAddress[num];for(int i=0; i<num; i++){to_address[i] = new InternetAddress(addresses.get(i));}message.setRecipients(Message.RecipientType.TO, to_address);//设置抄送⼈final int ccSize = ccAddresses.size();if(ccSize > 0){InternetAddress cc_Address[] = new InternetAddress[ccSize];for(int i=0; i<ccSize; i++){cc_Address[i] = new InternetAddress(ccAddresses.get(i));}message.setRecipients(, cc_Address);}//附件ByteArrayOutputStream baos = new ByteArrayOutputStream();workBook.write(baos);baos.flush();byte[] bt = baos.toByteArray();InputStream is = new ByteArrayInputStream(bt, 0, bt.length);baos.close();/*添加正⽂内容*/Multipart multipart = new MimeMultipart();BodyPart contentPart = new MimeBodyPart();// contentPart.setText(this.message);// contentPart.setHeader("Content-Type", "text/html;charset=UTF-8");contentPart.setContent(this.message, "text/html;charset=UTF-8");multipart.addBodyPart(contentPart);/*添加附件*/MimeBodyPart fileBody = new MimeBodyPart();DataSource source = new ByteArrayDataSource(is, "application/msexcel"); fileBody.setDataHandler(new DataHandler(source));// 中⽂乱码问题fileBody.setFileName(MimeUtility.encodeText(workBookName+".xls"));multipart.addBodyPart(fileBody);//设置主题message.setSubject(title);//设置内容message.setContent(multipart);//设置发送时间message.setSentDate(new Date());//发送邮件message.saveChanges(); //保存邮件信息//设置发送的格式Transport transport = sess.getTransport("smtp");if(this.send_server == null){transport.connect("191.0.0.6", this.mail_from, password);}else{transport.connect(this.send_server, this.mail_from, password);}transport.sendMessage(message, message.getAllRecipients());transport.close();("发送邮件成功");return true;}catch(Exception e){("发送邮件失败,原因可能是"+e.getMessage());return false;}}/**邮箱初始化,发件⼈邮箱、密码及服务器信息的获取* @return正确获取时返回Email对象,否则为null*/public static Email intiEmail(){// Log log = LogFactory.getLog(this.getClass());Email email = new Email();//获取系统的邮箱信息DataSet data = SQL.select(SQL.sql_Array(" select defmailpassword" +",defmailserver,defmailfrom from SystemSet "));if(data.next()){//发件⼈邮箱地址email.setMail_from(data.get("defmailfrom"));//获取并解析邮箱密码email.setPassword(EmailEncoder.DecoderPassword(data.get("defmailpassword")));// ("Password:"+EmailEncoder.DecoderPassword(data.get("defmailpassword"))); //服务器信息email.setSend_server(data.get("defmailserver"));}if(email.getMail_from().equals("")||email.getPassword().equals("")||email.getSend_server().equals("")){// ("发送⼈邮箱错误");// ("From:"+email.getMail_from()+"Password:"+// email.getPassword()+"Server:"+email.getSend_server());return null;}return email;}}。
package com.send.email;import javax.mail.*;import javax.mail.internet.*;import java.util.*;import javax.activation.*;public class SendMail2 {private String host = ""; //smtp服务器private String from = ""; //发件人地址private String to = ""; //收件人地址private String affix = ""; //附件地址private String affixName = ""; //附件名称private String user = ""; //用户名private String pwd = ""; //密码private String subject = ""; //邮件标题public void setAddress(String from,String to,String subject){ this.from = from;this.to = to;this.subject = subject;}public void setAffix(String affix,String affixName){this.affix = affix;this.affixName = affixName;}public void send(String host,String user,String pwd) { this.host = host;er = user;this.pwd = pwd;Properties props = new Properties();//设置发送邮件的邮件服务器的属性(这里使用网易的smtp服务器)props.put("mail.smtp.host", host);//需要经过授权,也就是有户名和密码的校验,这样才能通过验证props.put("mail.smtp.auth", "true");//用刚刚设置好的props对象构建一个sessionSession session = Session.getDefaultInstance(props);//有了这句便可以在发送邮件的过程中在console处显示过程信息,供调试使//用(你可以在控制台(console)上看到发送邮件的过程)session.setDebug(true);//用session为参数定义消息对象MimeMessage message = new MimeMessage(session);try{//加载发件人地址message.setFrom(new InternetAddress(from));//加载收件人地址message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));//加载标题message.setSubject(subject);// 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件Multipart multipart = new MimeMultipart();//设置邮件的文本内容BodyPart contentPart = new MimeBodyPart();contentPart.setText("第二种方法···");multipart.addBodyPart(contentPart);//添加附件BodyPart messageBodyPart= new MimeBodyPart();DataSource source = new FileDataSource(affix);//添加附件的内容messageBodyPart.setDataHandler(new DataHandler(source));//添加附件的标题//这里很重要,通过下面的Base64编码的转换可以保证你的中文附件标题名在发送时不会变成乱码sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();messageBodyPart.setFileName("=?GBK?B?"+enc.encode(affixName.getBytes())+"?=");multipart.addBodyPart(messageBodyPart);//将multipart对象放到message中message.setContent(multipart);//保存邮件message.saveChanges();// 发送邮件Transport transport = session.getTransport("smtp");//连接服务器的邮箱transport.connect(host, user, pwd);//把邮件发送出去transport.sendMessage(message, message.getAllRecipients());transport.close();}catch(Exception e){e.printStackTrace();}}public static void main(String[] args){SendMail2 cn = new SendMail2();//设置发件人地址、收件人地址和邮件标题cn.setAddress("发件人地址","收件人的地址","一个带附件的JavaMail邮件(标题)"); //设置要发送附件的位置和标题cn.setAffix("附件的路径","文件名称");//设置smtp服务器以及邮箱的帐号和密码cn.send("","邮箱账号","密码");}}。