1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > java向163发送附件_Java实现发送邮件功能(可带附件)

java向163发送附件_Java实现发送邮件功能(可带附件)

时间:2024-01-08 23:12:03

相关推荐

java向163发送附件_Java实现发送邮件功能(可带附件)

Java测试发送邮件的时候经常出现异常,检查多次账户名密码无误后,依然出现如下图错误: 之前不清楚,后面在网上得到提醒,我们所使用的smtp服务器使用的密码与我们自身登录网页端邮箱的密码是不一样的,以163邮箱为例,当我们设置打开smtp服务时会要求我们设

前言

本文章实现的发送邮件功能提供三个方法:只发送简单文本信息的邮件、发送HTML格式的邮件、发送可以附带多个附件的邮件。

以前使用Java实现邮箱功能都是依靠别人的jar包,按照别人的规则来使用,如果你只满足于用Java来发送简单文本信息的邮件,可以参考这位大神的博客:

/article/Javabiancheng//1127/194.html

如果想了解JavaMail到底如何实现,或者是想发送能带多个附件的邮件,请往下看。

准备好mail.jar,这个jar包网上很多,很容易就能下载到。 编码 1.编写MailSenderInfo.java public class MailSenderInfo {

// 用来保存发送邮件所有信息的JavaBean

// 发送邮件的服务器地址和端口号

private String mailServerHost;

private String mailServerPort;

// 邮件发送者的邮箱地址

private String fromAddress;

// 邮件接收者的邮箱地址

private String toAddress;

// 登录发送邮件服务器的用户名和密码

private String userName;

private String password;

// 是否需要身份验证

private boolean validate;

// 邮件的主题

private String subject;

// 邮件的文本内容

private String content;

// 邮件的附件

private File[] accessorys;

// getter()和setter()方法

// 获取邮件会话属性

public Properties getProperties() {

Properties p = new Properties();

p.put("mail.smtp.host", mailServerHost);

p.put("mail.smtp.port", mailServerPort);

p.put("mail.smtp.auth", (validate ? "true" : "false"));

return p;

}

public String getMailServerHost() {

return mailServerHost;

}

public void setMailServerHost(String mailServerHost) {

this.mailServerHost = mailServerHost;

}

public String getMailServerPort() {

return mailServerPort;

}

public void setMailServerPort(String mailServerPort) {

this.mailServerPort = mailServerPort;

}

public String getFromAddress() {

return fromAddress;

}

public void setFromAddress(String fromAddress) {

this.fromAddress = fromAddress;

}

public String getToAddress() {

return toAddress;

}

public void setToAddress(String toAddress) {

this.toAddress = toAddress;

}

public String getUserName() {

return userName;

}

public void setUserName(String userName) {

this.userName = userName;

}

public String getPassword() {

return password;

}

public void setPassword(String password) {

this.password = password;

}

public boolean isValidate() {

return validate;

}

public void setValidate(boolean validate) {

this.validate = validate;

}

public String getSubject() {

return subject;

}

public void setSubject(String subject) {

this.subject = subject;

}

public String getContent() {

return content;

}

public void setContent(String content) {

this.content = content;

}

public File[] getAccessorys() {

return accessorys;

}

public void setAccessorys(File[] accessorys) {

this.accessorys = accessorys;

}} 2.编写MailSender类: public class MailSender {

// 只发送简单文本形式的邮件

public boolean sendTextMail(MailSenderInfo mailInfo) {

// 判断是否需要身份验证

MyAuthenticator authenticator = null;

Properties p = mailInfo.getProperties();

// 如果需要身份验证,则创建一个密码验证器

if (mailInfo.isValidate()) {

authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());

}

// 根据邮件会话属性和密码验证器构造一个发送邮件的session

Session sendMailSession = Session.getDefaultInstance(p, authenticator);

try {

// 根据session创建一个邮件消息

Message mailMessage = new MimeMessage(sendMailSession);

// 创建邮件发送者的地址

Address fromAddress = new InternetAddress(mailInfo.getFromAddress());

// 设置邮件消息的发送者

mailMessage.setFrom(fromAddress);

// 创建邮件接收者的地址

Address toAddress = new InternetAddress(mailInfo.getToAddress());

// 设置邮件消息的接收者

mailMessage.setRecipient(Message.RecipientType.TO, toAddress);

// 设置邮件消息的主题

mailMessage.setSubject(mailInfo.getSubject());

// 设置邮件消息的发送时间

mailMessage.setSentDate(new Date());

// 设置邮件消息的主要内容

mailMessage.setText(mailInfo.getContent());

// 发送邮件

Transport.send(mailMessage);

return true;

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return false;

}

// 发送HTML形式的邮件

public boolean sendHtmlMail(MailSenderInfo mailInfo) {

// 判断是否需要身份验证

MyAuthenticator authenticator = null;

Properties p = mailInfo.getProperties();

// 如果需要身份验证,则创建一个密码验证器

if (mailInfo.isValidate()) {

authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());

}

// 根据邮件会话属性和密码验证器构造一个发送邮件的session

Session sendMailSession = Session.getDefaultInstance(p, authenticator);

try {

// 根据session创建一个邮件消息

Message mailMessage = new MimeMessage(sendMailSession);

// 创建邮件发送者的地址

Address fromAddress = new InternetAddress(mailInfo.getFromAddress());

// 设置邮件消息的发送者

mailMessage.setFrom(fromAddress);

// 创建邮件接收者的地址

Address toAddress = new InternetAddress(mailInfo.getToAddress());

// 设置邮件消息的接收者

mailMessage.setRecipient(Message.RecipientType.TO, toAddress);

// 设置邮件消息的主题

mailMessage.setSubject(mailInfo.getSubject());

// 设置邮件消息的发送时间

mailMessage.setSentDate(new Date());

// MimeMultipart类是一个容器类,包含MimeBodyPart类型的对象

Multipart mainPart = new MimeMultipart();

// 创建一个包含HTML内容的MimeBodyPart

BodyPart html = new MimeBodyPart();

// 设置HTML的内容

html.setContent(mailInfo.getContent(), "text/html;charset=utf-8");

mainPart.addBodyPart(html);

// 将MimeMultipart对象设置为邮件内容

mailMessage.setContent(mainPart);

// 发送邮件

Transport.send(mailMessage);

return true;

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return false;

}

// 发送带附件的邮件

public boolean sendAccessoryMail(MailSenderInfo mailInfo) {

// 判断是否需要身份验证

MyAuthenticator authentic1、注册一个网易邮箱,开通smtp服务,作为发送邮件的邮箱服务器 2、jar包准备commons-email-1.3.3.jar,activation.jar等,源码有提供 3、准备工作 //设置smtp host,QQ邮箱邮件服务器为,此处为163 邮箱

private static final String HostName = "ator = null;

Properties p = mailInfo.getProperties();

// 如果需要身份验证,则创建一个密码验证器

if (mailInfo.isValidate()) {

authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword());

}

// 根据邮件会话属性和密码验证器构造一个发送邮件的session

Session sendMailSession = Session.getDefaultInstance(p, authenticator);

try {

// 根据session创建一个邮件消息

Message mailMessage = new MimeMessage(sendMailSession);

// 创建邮件发送者的地址

Address fromAddress = new InternetAddress(mailInfo.getFromAddress());

// 设置邮件消息的发送者

mailMessage.setFrom(fromAddress);

// 创建邮件接收者的地址

Address toAddress = new InternetAddress(mailInfo.getToAddress());

// 设置邮件消息的接收者

mailMessage.setRecipient(Message.RecipientType.TO, toAddress);

// 设置邮件消息的主题

mailMessage.setSubject(mailInfo.getSubject());

// 设置邮件消息的发送时间

mailMessage.setSentDate(new Date());

// MimeMultipart类是一个容器类,包含MimeBodyPart类型的对象

Multipart mainPart = new MimeMultipart();

// 创建一个MimeBodyPart来包含普通文本

BodyPart text = new MimeBodyPart();

// 设置text的内容

text.setContent(mailInfo.getContent(), "text/html;charset=utf-8");

mainPart.addBodyPart(text);

File[] files = mailInfo.getAccessorys();

if (files.length != 0) {

for (int i = 0; i < files.length; i++) {

// 创建一个MimeBodyPart来包含附件

BodyPart accessory = new MimeBodyPart();

DataSource source = new FileDataSource(files[i]);

accessory.setDataHandler(new DataHandler(source));

accessory.setFileName(MimeUtility.encodeWord(files[i].getName()));

mainPart.addBodyPart(accessory);

}

}

// 将MimeMultipart对象设置为邮件内容

mailMessage.setContent(mainPart);

// 发送邮件

Transport.send(mailMessage);

return true;

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

return false;

}} 3.编写MyAuthenticator.java public class MyAuthenticator extends Authenticator {

// 身份验证

private String userName;

private String password;

public MyAuthenticator() {

}

public MyAuthenticator(String userName, String password) {

this.userName = userName;

this.password = password;

}

protected PasswordAuthentication getPasswordAuthentication() {

return new PasswordAuthentication(userName, password);

}} 4.编写测试类Test.java public class Test {

public static void main(String[] args) {

// sendTextMail();

// sendHtmlMail();

sendAccessoryMail();

}

public static void sendTextMail() {

MailSenderInfo mailInfo = new MailSenderInfo();

mailInfo.setMailServerHost("");

mailInfo.setMailServerPort("25");

// 现在邮箱服务器都是需要身份验证的,所以一直设置为true

mailInfo.setValidate(true);

// 使用mailInfo.setUserName("150402");也可以

mailInfo.setUserName("150402@");

mailInfo.setPassword("zhan1");

// 必须是邮件发送者的准确地址

mailInfo.setFromAddress("150402@");

mailInfo.setToAddress("1563478@");

mailInfo.setSubject("测试邮件");

mailInfo.setContent("这里是测试邮件的内容!");

// 发送邮件

MailSender sender = new MailSender();

// 发送文本邮件

sender.sendTextMail(mailInfo);

System.out.println("邮件发送成功!");

}

public static void sendHtmlMail() {

MailSenderInfo mailInfo = new MailSenderInfo();

mailInfo.setMailServerHost("");

mailInfo.setMailServerPort("25");

// 现在邮箱服务器都是需要身份验证的,所以一直设置为true

mailInfo.setValidate(true);

// 使用mailInfo.setUserName("150402");也可以

mailInfo.setUserName("150402@");

mailInfo.setPassword("zhan1");

// 必须是邮件发送者的准确地址

mailInfo.setFromAddress("150402@");

mailInfo.setToAddress("1563478@");

mailInfo.setSubject("测试邮件");

// 添加HTML内容

mailInfo.setContent("加粗了!

hello!");

// 发送邮件

MailSender sender = new MailSender();

// 发送文本邮件

sender.sendHtmlMail(mailInfo);

System.out.println("邮件发送成功!");

}

public static void sendAccessoryMail() {

MailSenderInfo mailInfo = new MailSenderInfo();

mailInfo.setMailServerHost("");

mailInfo.setMailServerPort("25");

// 现在邮箱服务器都是需要身份验证的,所以一直设置为true

mailInfo.setValidate(true);

// 使用mailInfo.setUserName("150402");也可以

mailInfo.setUserName("150402@");

mailInfo.setPassword("zhan1");

// 必须是邮件发送者的准确地址

mailInfo.setFromAddress("150402@");

mailInfo.setToAddress("1563478@");

mailInfo.setSubject("测试邮件加上附件");

// 添加HTML内容

mailInfo.setContent("加粗了!

hello!");

File[] files = { new File("c:\\2.png"), new File("c:\\1.png") };

// 添加附件

mailInfo.setAccessorys(files);

// 发送邮件

MailSender sender = new MailSender();

// 发送文本邮件

sender.sendAccessoryMail(mailInfo);

System.out.println("邮件发送成功!");

}} 运行结果 只发送普通文本信息邮件:

发送HTML形式的邮件:

发送带多个附件的邮件:

整个工程截图:

结束

当然了,上面的测试类是无比粗糙的,完全可以采用构造方法将入口封装起来,然后导出为一个jar包,这样我也是可以提供jar包和规则给别人用的人了。

注意,上述测试类中的邮箱服务器,邮箱账号,密码都必须改成你个人的才能正常使用。 参考 /wangfun/archive//04/15/265748.html /jbxiaozi/article/details/7351768 /s/blog_7cc3b8db010115nf.html /yejg1212/archive//06/01/3112702.html

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。