码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA中发送电子邮件的方法

时间:2017-05-22 15:14:09      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:方法   rgs   ssi   str   public   文件   pat   pie   文本   

   JAVA中发送邮件的方法不复杂,使用sun的JavaMail的架包就可以实现。

 

 一、下载JavaMail的架包,并导入项目中,如下:

技术分享

 

二、附上代码例子,如下:

1、在main函数中对各项参数进行赋值(参数说明已进行备注),即可通过send函数进行发送邮件操作。

 1 public class TestEmail {
 2 
 3     private final static String TIMEOUT_MS = "20000";
 4 
 5     public static void main(String[] args) {
 6         String host = "smtp.exmail.qq.com";
 7         String user = "xxxxxx@qq.com";
 8         String password = "xxxxxx";
 9         String recipients = "xxxxxx@qq.com";
10         String cc = "";
11         String subject = "邮件发送测试";
12         String content = "邮件正文:<br>你好!";
13         //方式1:通过URL获取附件
14 //        byte[] attachment = FileUtil.getFileByUrl("http://127.0.0.1/project/test.pdf");
15         //方式2:通过本地路径获取附件
16         byte[] attachment = FileUtil.getFileByPath("c://fujian.pdf");
17         
18         String attachmentName = "";
19         try {
20             attachmentName = MimeUtility.encodeWord("这是附件.pdf");
21             send(host, user, password, recipients, cc, subject, content, attachment, attachmentName);
22         } catch (Exception e) {
23             e.printStackTrace();
24         }
25     }
26     
27     /**
28      * @param host 邮件服务器主机名
29      * @param user 用户名
30      * @param password 密码
31      * @param recipients 收件人
32      * @param cc 抄送人
33      * @param subject 主题
34      * @param content 内容
35      * @param attachment 附件 [没有传 null]
36      * @param attachmentName 附件名称 [没有传 null]
37      * @throws Exception
38      */
39     public static void send(final String host, final String user, final String password,
40                      final String recipients, final String cc, final String subject, final String content,
41                      final byte[] attachment,final String attachmentName) throws Exception {
42         Properties props = new Properties();
43         props.put("mail.smtp.host", host);
44         props.put("mail.smtp.auth", "true");
45         props.put("mail.smtp.timeout", TIMEOUT_MS);
46 
47         Authenticator auth = new Authenticator() {
48             @Override
49             protected PasswordAuthentication getPasswordAuthentication() {
50                 return new PasswordAuthentication(user, password);
51             }
52         };
53         Session session = Session.getInstance(props, auth);
54         MimeMessage msg = new MimeMessage(session);
55         msg.setFrom(new InternetAddress(user));
56         msg.setRecipient(Message.RecipientType.TO, new InternetAddress(recipients));
57         if (cc != null && cc.length() > 0) {
58             msg.setRecipients(Message.RecipientType.CC, cc);
59         }
60         msg.setSubject(subject);
61         // 向multipart对象中添加邮件的各个部分内容,包括文本内容和附件
62         Multipart multipart = new MimeMultipart();
63         // 添加邮件正文
64         BodyPart contentPart = new MimeBodyPart();
65         contentPart.setContent(content, "text/html;charset=UTF-8");
66         multipart.addBodyPart(contentPart);
67         // 添加附件的内容
68         if (attachment!=null) {
69             BodyPart attachmentBodyPart = new MimeBodyPart();
70             DataSource source = new ByteArrayDataSource(attachment,"application/octet-stream");
71             attachmentBodyPart.setDataHandler(new DataHandler(source));
72             //MimeUtility.encodeWord可以避免文件名乱码
73             attachmentBodyPart.setFileName(MimeUtility.encodeWord(attachmentName));
74             multipart.addBodyPart(attachmentBodyPart);
75         }
76         // 将multipart对象放到message中
77         msg.setContent(multipart);
78         // 保存邮件
79         msg.saveChanges();
80         Transport.send(msg, msg.getAllRecipients());
81     }
82 }

 

2、上面的例子中,如果有附件,可对附件进行设置。附件的获取这里举2个例子,方式1通过网址获取,方式2通过本地获取。附上获取附件文件的方法,如下:

 1 public class FileUtil {
 2 
 3     public static byte[] getFileByUrl(String urlStr){
 4         try {
 5             URL url = new URL(urlStr);
 6             HttpURLConnection conn = (HttpURLConnection) url.openConnection();            
 7             InputStream is = conn.getInputStream();  
 8             BufferedInputStream bis = new BufferedInputStream(is);  
 9             ByteArrayOutputStream baos = new ByteArrayOutputStream();  
10             final int BUFFER_SIZE = 2048;
11             final int EOF = -1;  
12             int c;  
13             byte[] buf = new byte[BUFFER_SIZE];  
14             while (true) {  
15                 c = bis.read(buf);  
16                 if (c == EOF)  
17                     break;  
18                 baos.write(buf, 0, c);  
19             }  
20             conn.disconnect();  
21             is.close();  
22       
23             byte[] data = baos.toByteArray();  
24             baos.flush();
25             return data;
26             
27         } catch (Exception e) {
28             e.printStackTrace();
29         }
30         return null;
31     }
32     
33     public static byte[] getFileByPath(String pathStr){
34         File file = new File(pathStr);
35         try {
36             FileInputStream fis = new FileInputStream(file);
37             ByteArrayOutputStream bos = new ByteArrayOutputStream(1000);
38             byte[] b = new byte[1000];
39             int n;
40             while ((n = fis.read(b)) != -1) {
41                 bos.write(b, 0, n);
42             }
43             fis.close();
44             byte[] data = bos.toByteArray();
45             bos.close();
46             return data;
47         } catch (Exception e) {
48             e.printStackTrace();
49         }
50         return null;
51     }
52 }

 

JAVA中发送电子邮件的方法

标签:方法   rgs   ssi   str   public   文件   pat   pie   文本   

原文地址:http://www.cnblogs.com/pcheng/p/6889133.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!