java 程序发送附件_【java】实现发送带附件email

一、目标

用java代码实现发送带附件email的功能

二、学习地址

三、前期准备:

增加jar包:javamail1_4_5.zip

四、代码

public class SendMailService {

private MailInformation mailInfor;

private static SendMailService sendMailService;

public void setMailInfor(MailInformation mailInfor) {

this.mailInfor = mailInfor;

}

public static SendMailService getService() {

if (sendMailService == null) {

sendMailService = new SendMailService();

}

return sendMailService;

}

/**

* 此段代码用来发送普通带附件电子邮件

*/

public void send() throws Exception {

try {

Properties props = new Properties(); // 获取系统环境

Authenticator auth = new Email_Autherticator(); // 进行邮件服务器用户认证

props.put("mail.smtp.host", mailInfor.getHost());

props.put("mail.smtp.auth", "true");

Session session = Session.getDefaultInstance(props, auth);

// 用于在console中显示执行过程信息

session.setDebug(true);

// 设置session,和邮件服务器进行通讯。

MimeMessage message = new MimeMessage(session);

message.setSubject(mailInfor.getMail_subject()); // 设置邮件标题

message.setSentDate(new Date()); // 设置邮件发送日期

Address address = new InternetAddress(mailInfor.getSendEmail(),

mailInfor.getSendPassword());

message.setFrom(address); // 设置邮件发送者的地址

Address toAddress = new InternetAddress(mailInfor.getMail_to()); // 设置邮件接收方的地址

message.addRecipient(Message.RecipientType.TO, toAddress);// 加载收件人地址

message.setText(mailInfor.getMail_body()); // 设置邮件正文

// 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件

Multipart multipart = new MimeMultipart();

// 设置邮件的文本内容

BodyPart contentPart = new MimeBodyPart();

contentPart.setText(mailInfor.getMail_body());

multipart.addBodyPart(contentPart);

multipart.addBodyPart(contentPart);

if (!mailInfor.getFile().isEmpty()) {// 有附件

Enumeration efile = mailInfor.getFile().elements();

while (efile.hasMoreElements()) {

contentPart = new MimeBodyPart();

String filename = efile.nextElement().toString(); // 选择出每一个附件名

FileDataSource fds = new FileDataSource(filename); // 得到数据源

contentPart.setDataHandler(new DataHandler(fds)); // 得到附件本身并至入BodyPart

// contentPart.setFileName(fds.getName());

// //得到文件名同样至入BodyPart,并解决中文名乱码问题

contentPart.setFileName(MimeUtility.encodeText(fds

.getName()));

multipart.addBodyPart(contentPart);

}

mailInfor.getFile().removeAllElements();

}

// 将multipart对象放到message中

message.setContent(multipart, "text/html;charset=gb2312"); // Multipart加入到信件

// 保存邮件

message.saveChanges();

Transport.send(message); // 发送邮件

System.out.println("send ok!");

} catch (Exception ex) {

ex.printStackTrace();

throw new Exception(ex.getMessage());

}

}

/**

* 用来进行服务器对用户的认证

*/

class Email_Autherticator extends Authenticator {

public Email_Autherticator() {

super();

}

Email_Autherticator(String user, String pwd) {

super();

mailInfor.setSendEmail(user);

mailInfor.setSendPassword(pwd);

}

public PasswordAuthentication getPasswordAuthentication() {

return new PasswordAuthentication(mailInfor.getSendEmail(),

mailInfor.getSendPassword());

}

}

}

javaBean

public class MailInformation {

// 发送邮件的邮箱地址服务器

private String host;

// 这个是你的邮箱用户名以及邮件显示发送者邮箱

private String sendEmail ;

// 你的邮箱密码

private String sendPassword ;

//邮件发送者显示姓名

private String sendName ;

//待接收的邮箱

private String mail_to ;

//邮件标题

private String mail_subject;

//邮件内容

private String mail_body ;

//用于保存发送附件的文件名的集合

private Vector file ;

/**

* 建立发邮件实体时传入发件人的email信息

* @param sendEmail email地址

* @param sendPassword email密码

* @param sendName 发送邮件中显示发件人姓名

*/

public MailInformation(String sendEmail,String sendPassword,String sendName){

this.sendEmail = sendEmail;

this.sendPassword = sendPassword;

this.sendName = sendName;

}

/**

* 163邮箱的host

*/

public void set163Host(){

host = "smtp.163.com";

}

/**

* 126邮箱的host

*/

public void set126Host(){

host = "smtp.126.com";

}

/**

* qq邮箱的host

*/

public void setQQHost(){

host = "smtp.qq.com";

}

/**

* 雅虎邮箱的host

*/

public void setYahooHost(){

host = "smtp.mail.yahoo.com.cn ";

}

/**

* 获得发送邮件的邮箱地址服务器

* @return 地址服务器

*/

public String getHost() {

return host;

}

/**

* 设置发送邮件的邮箱地址服务器

* @param host

*/

public void setHost(String host) {

this.host = host;

}

/**

* 设置发件人的email

* @param sendEmail email

*/

public void setSendEmail(String sendEmail) {

this.sendEmail = sendEmail;

}

/**

* 得到发件人的email

* @return sendEmail email

*/

public String getSendEmail() {

return sendEmail ;

}

/**

* 设置发件人的email密码

* @param sendPassword 密码

*/

public void setSendPassword(String sendPassword) {

this.sendPassword = sendPassword;

}

/**

* 得到发件人的email密码

* @return sendPassword 密码

*/

public String getSendPassword() {

return sendPassword ;

}

/**

* 得到邮件中显示的发件人姓名

* @return 发件人姓名

*/

public String getSendName() {

return sendName;

}

/**

* 设置邮件中显示的发件人姓名

* @param sendName 发件人姓名

*/

public void setSendName(String sendName) {

this.sendName = sendName;

}

/**

* 得到收件人email

* @return 收件人email

*/

public String getMail_to() {

return mail_to;

}

/**

* 设置收件人email

* @param mail_to 收件人email

*/

public void setMail_to(String mail_to) {

this.mail_to = mail_to;

}

/**

* 邮件标题

* @return 邮件标题

*/

public String getMail_subject() {

return mail_subject;

}

/**

* 设置邮件标题

* @param mail_subject 邮件标题

*/

public void setMail_subject(String mail_subject) {

this.mail_subject = mail_subject;

}

/**

* 得到邮件内容

* @return 邮件内容

*/

public String getMail_body() {

return mail_body;

}

/**

* 设置邮件内容

* @param mail_body 邮件内容

*/

public void setMail_body(String mail_body) {

this.mail_body = mail_body;

}

/**

* 得到附件所在的绝对路径

* @return 绝对路径

*/

public Vector getFile() {

return file;

}

/**

* 天剑附件所在的绝对路径

* @return 绝对路径

*/

public void setFile(Vector file) {

this.file = file;

}

}

五、调用方式

public static void main(String[] args) {

SendMailService sendmail = SendMailService.getService();

MailInformation mailInformation = new MailInformation(

"发件人email", "发件人email密码", "发件人显示姓名");

mailInformation.set163Host();

mailInformation.setMail_subject("测试发送邮件");

mailInformation.setMail_body("这是一封测试是否能够发送带附件邮件的信");

mailInformation.setMail_to("收件人email");

Vector fileStr = new Vector();

fileStr.add("附件地址绝对路径");

mailInformation.setFile(fileStr);

sendmail.setMailInfor(mailInformation);

try {

sendmail.send();

} catch (Exception ex) {

ex.printStackTrace();

}

}

六、问题解决

1、发送邮件的邮箱地址服务器

需要搜索得到发件人邮箱的 SMTP服务器地址,比如126的:http://help.163.com/09/0219/10/52GOPOND007536NI.html

2、中文名附件乱码解决

解决地址:http://ben-sin.iteye.com/blog/387536

方法:contentPart.setFileName(MimeUtility.encodeText(fds.getName()));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值