java 复杂的邮件发送(带附件 图片)
2016-08-10 09:16
651 查看
前言:在原<a target=_blank href="http://blog.csdn.net/qq_34328832/article/details/52162959" style="cursor: pointer;">java邮件发送</a>做了改进,新添功能,如:群发,发图片,和带附件发送
另外由于发送图片涉及图片上传,在这奉上
jsp 页面:关于图片上传的(部分)
另外注意 :1.表单提交 记得注明 method="post" enctype="multipart/form-data" ,
小提示:处了基本功能 ----- 邮件发送,以外,自己可以再做一点功能的补充,像一些表单验证之类的
这里介绍一下自己的:
1.因为表单内容是使用的是 textarea ,所以这里做了一个字数限制的js
js
//限制文本域输入字数
function checkLen(obj) {
var maxChars = 600;//最多字符数
if (obj.value.length > maxChars)
obj.value = obj.value.substring(0, maxChars);
var curr = maxChars - obj.value.length;
document.getElementById("count").innerHTML = curr.toString();
}
jsp
最后:自我感觉功能上有些地方还是欠缺的,有意见的欢迎小伙伴们指出
package com.base.util; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.FileDataSource; import javax.mail.Message; import javax.mail.MessagingException; 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; import javax.mail.internet.MimeUtility; /** * 邮件发送公用类 * @author Administrator * */ public class MailSendUtil { /** * 常见的邮件发送协议地址 */ // public static final String SMTP_QQ = "smtp.qq.com"; // public static final String SMTP_163 = "smtp.163.com"; // public static final String SMTP_126 = "smtp.126.com"; // public static final String SMTP_SINA = "smtp.sina.com"; // public static final String SMTP_GMAIL = "smtp.gmail.com"; //发送的信息 private MimeMessage message; //邮件会话 private Session session; //邮件发送 private Transport transport; private String mailHost=""; private String sender_username=""; private String sender_password=""; private Properties properties = new Properties(); /** * 初始化方法 * @param debug */ public MailSendUtil(boolean debug) { InputStream in = MailSendUtil.class.getResourceAsStream("/MailServer.properties"); try { properties.load(in); this.mailHost = properties.getProperty("mail.smtp.host"); this.sender_username = properties.getProperty("mail.sender.username"); this.sender_password = properties.getProperty("mail.sender.password"); } catch (IOException e) { e.printStackTrace(); } session = Session.getInstance(properties); session.setDebug(debug);//开启后有调试信息 message = new MimeMessage(session); } public MailSendUtil(boolean debug,String username,String pwd){ String type = username.substring(username.indexOf("@")+1, username.length()); String host = "smtp."+type; try { mailHost = host; sender_username = username; sender_password = pwd; } catch (Exception e) { e.printStackTrace(); } // session.setDebug(debug);//开启后有调试信息 message = new MimeMessage(session); } /** * 发送邮件 * * @param subject 邮件主题 * @param sendHtml 邮件内容 * @param receiveUser 收件人地址 */ public void doSendHtmlEmail(String subject, String sendHtml, String receiveUser) { try { // 发件人 //InternetAddress from = new InternetAddress(sender_username); // 下面这个是设置发送人的Nick name InternetAddress from = new InternetAddress(MimeUtility.encodeWord("JavaEamil")+" <"+sender_username+">"); message.setFrom(from); // 收件人 InternetAddress to = new InternetAddress(receiveUser); message.setRecipient(Message.RecipientType.TO, to);//还可以有CC、BCC // 邮件主题 message.setSubject(subject); String content = sendHtml.toString(); // 邮件内容,也可以使纯文本"text/plain" message.setContent(content, "text/html;charset=UTF-8"); // 保存邮件 message.saveChanges(); transport = session.getTransport("smtp"); // smtp验证,就是你用来发邮件的邮箱用户名密码 transport.connect(mailHost, sender_username, sender_password); // 发送 transport.sendMessage(message, message.getAllRecipients()); System.out.println("发送成功!"); } catch (Exception e) { e.printStackTrace(); }finally { if(transport!=null){ try { transport.close(); } catch (MessagingException e) { e.printStackTrace(); } } } } /** * 群发邮件 * 默认 * @param subject 邮件主题 * @param sendHtml 邮件内容 * @param stringArr 收件人地址 */ public boolean doSendHtmlEmails(String subject, String sendHtml, String[] stringArr) { boolean iflag = false; try { // 发件人 //InternetAddress from = new InternetAddress(sender_username); // 下面这个是设置发送人的Nick name InternetAddress from = new InternetAddress(MimeUtility.encodeWord("JavaEamil")+" <"+sender_username+">"); message.setFrom(from); // 设置收件人们 final int num = stringArr.length; InternetAddress[] addresses = new InternetAddress[num]; for (int i = 0; i < num; i++) { // addresses[i] = new InternetAddress(stringArr[i]); if(null != stringArr[i]){ addresses[i] = new InternetAddress(stringArr[i]); } } message.setRecipients(Message.RecipientType.TO, addresses); // 邮件主题 message.setSubject(subject); String content = sendHtml.toString(); // 邮件内容,也可以使纯文本"text/plain" message.setContent(content, "text/html;charset=UTF-8"); // 保存邮件 message.saveChanges(); transport = session.getTransport("smtp"); // smtp验证,就是你用来发邮件的邮箱用户名密码 transport.connect(mailHost, sender_username, sender_password); // 发送 transport.sendMessage(message, message.getAllRecipients()); System.out.println("发送成功!"); iflag = true; } catch (Exception e) { e.printStackTrace(); iflag = false; }finally { if(transport!=null){ try { transport.close(); } catch (MessagingException e) { e.printStackTrace(); } } } return iflag; } /** * 群发邮件 * 非默认 * @param subject 邮件主题 * @param sendHtml 邮件内容 * @param stringArr 收件人地址 */ public boolean doSendHtmlEmailsBy(String subject, String sendHtml, String[] stringArr) { boolean iflag = false; try { // 发件人 //InternetAddress from = new InternetAddress(sender_username); // 下面这个是设置发送人的Nick name InternetAddress from = new InternetAddress(MimeUtility.encodeWord("JavaEamil")+" <"+sender_username+">"); message.setFrom(from); // 设置收件人们 final int num = stringArr.length; InternetAddress[] addresses = new InternetAddress[num]; for (int i = 0; i < num; i++) { // addresses[i] = new InternetAddress(stringArr[i]); if(null != stringArr[i]){ addresses[i] = new InternetAddress(stringArr[i]); } } message.setRecipients(Message.RecipientType.TO, addresses); // 邮件主题 message.setSubject(subject); String content = sendHtml.toString(); // 邮件内容,也可以使纯文本"text/plain" message.setContent(content, "text/html;charset=UTF-8"); // 保存邮件 message.saveChanges(); //transport = session.getTransport("smtp"); // smtp验证,就是你用来发邮件的邮箱用户名密码 transport.connect(mailHost, sender_username, sender_password); // 发送 transport.sendMessage(message, message.getAllRecipients()); System.out.println("发送成功!"); iflag = true; } catch (Exception e) { e.printStackTrace(); iflag = false; }finally { if(transport!=null){ try { transport.close(); } catch (MessagingException e) { e.printStackTrace(); } } } return iflag; } /** * 群发邮件 带图片 * @param subject * @param sendHtml * @param stringArr * @param img * @return * @throws Exception */ public boolean createImageMail (String subject, String sendHtml, String[] stringArr,String img) throws Exception{ boolean iflag = false; try { // 发件人 //InternetAddress from = new InternetAddress(sender_username); // 下面这个是设置发送人的Nick name InternetAddress from = new InternetAddress(MimeUtility.encodeWord("JavaEamil")+" <"+sender_username+">"); message.setFrom(from); // 设置收件人们 final int num = stringArr.length; InternetAddress[] addresses = new InternetAddress[num]; for (int i = 0; i < num; i++) { // addresses[i] = new InternetAddress(stringArr[i]); if(null != stringArr[i]){ addresses[i] = new InternetAddress(stringArr[i]); } } message.setRecipients(Message.RecipientType.TO, addresses); // 邮件主题 message.setSubject(subject); // 准备邮件数据 // 准备邮件正文数据 MimeBodyPart text = new MimeBodyPart(); text.setContent("这是一封邮件正文带图片<img src='cid:xxx.jpg'>的邮件", "text/html;charset=UTF-8"); // 准备图片数据 MimeBodyPart image = new MimeBodyPart(); DataHandler dh = new DataHandler(new FileDataSource(img)); image.setDataHandler(dh); image.setContentID("xxx.jpg"); // 描述数据关系 MimeMultipart mm = new MimeMultipart(); mm.addBodyPart(text); mm.addBodyPart(image); mm.setSubType("related"); message.setContent(mm); message.saveChanges(); //将创建好的邮件写入到E盘以文件的形式进行保存 message.writeTo(new FileOutputStream("E:\\ImageMail.eml")); transport = session.getTransport("smtp"); // smtp验证,就是你用来发邮件的邮箱用户名密码 transport.connect(mailHost, sender_username, sender_password); // 发送 transport.sendMessage(message, message.getAllRecipients()); System.out.println("发送成功!"); iflag = true; }catch (Exception e) { e.printStackTrace(); }finally { if(transport!=null){ try { transport.close(); } catch (MessagingException e) { e.printStackTrace(); } } } return iflag; } /** * 创建一封带附件的邮件 * 默认 * @param subject * @param sendHtml * @param stringArr * @param file * @return * @throws Exception */ public boolean createAttachMail(String subject, String sendHtml, String[] stringArr,String file) throws Exception{ boolean iflag = false; try { // 发件人 //InternetAddress from = new InternetAddress(sender_username); // 下面这个是设置发送人的Nick name InternetAddress from = new InternetAddress(MimeUtility.encodeWord("JavaEamil")+" <"+sender_username+">"); message.setFrom(from); // 设置收件人们 final int num = stringArr.length; InternetAddress[] addresses = new InternetAddress[num]; for (int i = 0; i < num; i++) { // addresses[i] = new InternetAddress(stringArr[i]); if(null != stringArr[i]){ addresses[i] = new InternetAddress(stringArr[i]); } } message.setRecipients(Message.RecipientType.TO, addresses); // 邮件主题 message.setSubject(subject); //创建邮件正文,为了避免邮件正文中文乱码问题,需要使用charset=UTF-8指明字符编码 MimeBodyPart text = new MimeBodyPart(); text.setContent(sendHtml, "text/html;charset=UTF-8"); //创建邮件附件 MimeBodyPart attach = new MimeBodyPart(); DataHandler dh = new DataHandler(new FileDataSource(file)); attach.setDataHandler(dh); attach.setFileName(dh.getName()); //创建容器描述数据关系 MimeMultipart mp = new MimeMultipart(); mp.addBodyPart(text); mp.addBodyPart(attach); mp.setSubType("mixed"); message.setContent(mp); message.saveChanges(); //将创建的Email写入到E盘存储 // message.writeTo(new FileOutputStream("E:\\attachMail.eml")); transport = session.getTransport("smtp"); // smtp验证,就是你用来发邮件的邮箱用户名密码 transport.connect(mailHost, sender_username, sender_password); // 发送 transport.sendMessage(message, message.getAllRecipients()); System.out.println("发送成功!"); iflag = true; }catch (Exception e) { e.printStackTrace(); iflag = false; }finally { if(transport!=null){ try { transport.close(); } catch (MessagingException e) { e.printStackTrace(); iflag = false; } } } return iflag; } /** * 生成一封带附件和带图片的邮件 * @param subject * @param sendHtml * @param stringArr * @param file * @param img * @return * @throws Exception */ public boolean createMixedMail(String subject, String sendHtml, String[] stringArr,File file,String img) throws Exception { boolean iflag = false; try { //正文 MimeBodyPart text = new MimeBodyPart(); text.setContent(sendHtml,"text/html;charset=UTF-8"); //图片 MimeBodyPart image = new MimeBodyPart(); image.setDataHandler(new DataHandler(new FileDataSource(img))); image.setContentID(img); //附件1 MimeBodyPart attach = new MimeBodyPart(); DataHandler dh = new DataHandler(new FileDataSource(file)); attach.setDataHandler(dh); attach.setFileName(dh.getName()); //描述关系:正文和图片 MimeMultipart mp1 = new MimeMultipart(); mp1.addBodyPart(text); mp1.addBodyPart(image); mp1.setSubType("related"); //描述关系:正文和附件 MimeMultipart mp2 = new MimeMultipart(); mp2.addBodyPart(attach); //代表正文的bodypart MimeBodyPart content = new MimeBodyPart(); content.setContent(mp1); mp2.addBodyPart(content); mp2.setSubType("mixed"); message.setContent(mp2); message.saveChanges(); //将创建的Email写入到E盘存储 // message.writeTo(new FileOutputStream("E:\\attachMail.eml")); transport = session.getTransport("smtp"); // smtp验证,就是你用来发邮件的邮箱用户名密码 transport.connect(mailHost, sender_username, sender_password); // 发送 transport.sendMessage(message, message.getAllRecipients()); System.out.println("发送成功!"); iflag = true; }catch (Exception e) { e.printStackTrace(); }finally { if(transport!=null){ try { transport.close(); } catch (MessagingException e) { e.printStackTrace(); } } } return iflag; } }
另外由于发送图片涉及图片上传,在这奉上
/** * 图片上传 * @param file * @param request * @return */ public String fileupload(@RequestParam(value = "file", required = false) MultipartFile file, HttpServletRequest request){ //获取工作路径 String path = request.getSession().getServletContext().getRealPath("upload"); String fileName = file.getOriginalFilename(); System.out.println(path); //保存 try { //创建图片储存目录 File targetFile = new File(path, fileName); if(!targetFile.exists()){ targetFile.mkdirs(); file.transferTo(targetFile); } else{ file.transferTo(targetFile); } } catch (Exception e) { e.printStackTrace(); } String fileUrl = path+"\\"+fileName; return fileUrl; }
jsp 页面:关于图片上传的(部分)
<input type="file" name="file" id="file" size="15" enctype="multipart/form-data" accept="image/jpg,image/png">
另外注意 :1.表单提交 记得注明 method="post" enctype="multipart/form-data" ,
小提示:处了基本功能 ----- 邮件发送,以外,自己可以再做一点功能的补充,像一些表单验证之类的
这里介绍一下自己的:
1.因为表单内容是使用的是 textarea ,所以这里做了一个字数限制的js
js
//限制文本域输入字数
function checkLen(obj) {
var maxChars = 600;//最多字符数
if (obj.value.length > maxChars)
obj.value = obj.value.substring(0, maxChars);
var curr = maxChars - obj.value.length;
document.getElementById("count").innerHTML = curr.toString();
}
jsp
<textarea id="content" name="content" rows="" cols="175" style="overflow-y: auto; overflow-x: hidden;border: 1px solid #cad8e5;" class="edit_area js_editorArea" placeholder="*内容..."onchange="this.value=this.value.substring(0, 600)" onkeydown="this.value=this.value.substring(0, 600)" onkeyup="checkLen(this)"></textarea>
最后:自我感觉功能上有些地方还是欠缺的,有意见的欢迎小伙伴们指出
相关文章推荐
- Java-发送邮件(附件、图片)---(三)类-Properties、Session、MimeMessage
- javamail发送复杂邮件(包含文本、图片、附件)
- javamail 发送邮件,发复杂html,包括附件,以及内嵌图片的邮件
- [置顶] JAVA实现发送邮件(图片和附件)
- java发送邮件,正文图片,附件
- java实现发送邮件可多个附件内嵌图片-commons-email使用
- 强大的java编程实现邮件发送功能,支持内容,上传多个图片和多个附件
- 用java实现的邮件系统六(javamail发送复杂邮件-带附件和html)
- Java-发送邮件(附件、图片)---(一)概述
- Java程序中使用JavaMail发送带图片和附件的邮件
- Java自动发送带图片邮件(带附件)
- java实现发送邮件可多个附件内嵌图片-commons-email使用(未测试)
- java邮件开发(8、用spring发送HTML嵌套图片并带附件)
- JAVA邮件发送(文字+图片+附件)【源码】
- java发送带附件的邮件/附件图片显示在邮件内容中
- Java-发送邮件(附件、图片)---(四)类-MimeMultipart、MimeBodyPart、FileDataSource、DataHandler、
- java程序发送内嵌图片、带附件邮件
- Spring 发送带有内嵌图片和附件的邮件的java程序
- java代码生成的带图片和附件的邮件发送实例
- Java-发送邮件(附件、图片)---(五)实例