共计 4044 个字符,预计需要花费 11 分钟才能阅读完成。
一、邮件的相关概念
邮件协议。主要包括:
SMTP协议:Simple Mail Transfer Protocol,即简单邮件传输协议,用于发送电子邮件
POP3协议:Post Office Protocol 3,即邮局协议的第三个版本,用于接收邮件
IMAP协议:Internet Message Access Protocol,即互联网消息访问协议,是 POP3 的替代协议
二、搭建 James 邮件服务器
James是 Apache 的一个开源项目,纯 Java 实现
搭建 James 服务器
① 下载 apache-james-2.3.2.zip 解压
② 运行 bin 目录下的 run.bat 即可启动服务器[Telnet localhost 4555]
③ 通过 apps\james\SAR-INF\config.xml 配置服务器
注:先到 bin 下run一道。 放如非中文目录, 得再控制面板开启 Telnet 客户端
三、安装 OutLook[邮件客户端]
产品秘钥:PQDV9-GPDV4-CRM4D-PHDTH-4M2MT
创建用户账号
一、使用 telnet 连接 James 的Remote Administration Tool
二、以管理员身份登录
三、使用 adduser 命令添加用户
四、配置 outlook 邮件客户端
为了方便查看,可以配置 Microsoft Outlook 邮件客户端, 保证 James 邮件服务器是启动状态,启动 Microsoft Outlook.
选择“工具”->“选项”,打开“选项”面板。选择“邮件设置”并点击“电子邮件账户”,打开“账号设置”面板。在“电子邮件”选项卡下新建邮件账户
五、案例[搭建 James 邮件服务器]
需求说明:
在本机搭建 James 邮件服务器,自定义服务器的名称。
创建两个测试用户。
在 Microsoft Outlook 中配置其中一个测试用户为 Outlook 邮件账户
六、使用 JavaMail 发送电子邮件 ( 案例)
需求:
使用 JavaMail 技术,实现从 A 账户给 B 账户发送一封电子邮件,标题为“会议通知”,邮件内容为“XX你好!请于明天下午 16:00 准时到 B01 会议室召开技术讨论会。”通过 Outlook 客户端查看邮件程序发送的邮件是否发送成功
关键代码:
创建一个类 EmailAuthenticator 并继承自 Authenticator,并植入用户名和密码
创建 Mail 类设置邮件信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | public class Mail { private String mailServer,from,to,mailSubject,mailContent; private String username,password; public Mail(){ // 设置邮件信息 // 进行认证登录的用户名 username= "hq@mail.com" ; // 认证密码 password= "hq" ; // 认证的邮箱对应的邮件服务器 mailServer= "192.168.17.176" ; // 发件人信息 from= "wj" ; // 收件人信息 to= "wj@mail.com" ; // 邮件标题 mailSubject= "我们都是好孩子 333" ; // 邮件内容 mailContent= "这是一封测试邮件!如有雷同,纯属不可能" ; } // 设置邮件服务器 @SuppressWarnings ( "static-access" ) public void send(){ Properties prop=System.getProperties(); // 指定邮件 server prop.put( "mail.smtp.host" , mailServer); // 是否开启认证 prop.put( "mail.smtp.auth" , "true" ); //smtp 协议的 prop.put( "mail.smtp.port" , "25" ); // 产生 Session 服务 EmailAuthenticator mailauth= new EmailAuthenticator(username, password); Session mailSession=Session.getInstance(prop,(Authenticator)mailauth); try { // 封装 Message 对象 Message message= new MimeMessage(mailSession); message.setFrom( new InternetAddress(from)); // 发件人 message.setRecipient(Message.RecipientType.TO, new InternetAddress(to)); // 收件人 message.setSubject(mailSubject); // 设置内容(设置字符集处理乱码问题) message.setContent(mailContent, "text/html;charset=gbk" ); message.setSentDate( new Date()); // 创建 Transport 实例,发送邮件 Transport tran=mailSession.getTransport( "smtp" ); tran.send(message,message.getAllRecipients()); tran.close(); } catch (Exception e) { e.printStackTrace(); } } |
测试类:
1 2 3 4 5 6 7 8 | public class MyTest { public static void main(String[] args) { Mail mail= new Mail(); mail.send(); System.out.println( "success!" ); } } |
七、发送带附件的 Mail
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public class MailWithAttachment { private JavaMailSender mailSender; // 必须使用 JavaMailSender public void setMailSender(JavaMailSender mailSender) { this .mailSender = mailSender; } public void send() throws MessagingException,IOException{ MimeMessage mimeMessage = mailSender.createMimeMessage(); MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true , "UTF-8" ); helper.setFrom( "hq@mail.com" ); helper.setTo( "wj@mail.com" ); helper.setSubject( "哈哈哈" ); helper.setText( "每日一笑,开开心心!!!" ); // 添加附件 1 ClassPathResource file1 = new ClassPathResource( "/cn/bdqn/attachfiles/test.doc" ); helper.addAttachment(file1.getFilename(), file1.getFile()); // 添加附件 2:附件的文件名为中文时,需要对文件名进行编码转换,解决乱码问题 ClassPathResource file2 = new ClassPathResource( "/cn/bdqn/attachfiles/ 附件测试文件.doc" ); helper.addAttachment(MimeUtility.encodeWord(file2.getFilename()),file2.getFile()); mailSender.send(mimeMessage); } } |
测试类:
1 2 3 4 5 6 7 8 9 10 11 12 13 | public class MailTest { public static void main(String[] args){ ApplicationContext context = new ClassPathXmlApplicationContext( "applicationContext.xml" ); /* 测试带附件的邮件 */ try { MailWithAttachment mailWithAttach = (MailWithAttachment)context.getBean( "mailWithAttachment" ); mailWithAttach.send(); } catch (Exception e){ System.out.print(e.toString()); } } } |
applicationContext.xml:大配置