Java自动发送带图片邮件(带附件) 太过爱你忘了你带给我的痛 2021-09-28 00:02 383阅读 0赞 网上类似的代码很多,但是在实际使用中大多并不能运行,这次刚好项目要用到这个功能,就把代码贴出来,供大家参考。 代码直接就能够运行,并且我在上面有了详细的注释,不过还有几个注意点需要告知,特别是第一次使用的朋友,一定要注意以下几点: 1.一定要开启邮箱的SMTP服务,这个具体的我不多说了,网上这个很多,基本上都有图,直接了当 2.开启SMTP后,代码里面的密码并非是邮箱的登录密码,而是邮箱生成的授权码,这个在完成第一步后邮箱会显示你的授权码。 3.目前我看到的主要关于自动发邮件的错误一般是530,关于这个错误只需要加上 props.setProperty("mail.smtp.starttls.enable", "true"); 这条代码就够了。 package com.jjrt.eid.utils; import javax.mail.*; import javax.mail.internet.*; import java.util.*; import javax.activation.*; /** * 自动发送邮件(带附件) * @作者:JackHisen(GWD) * @项目名:eid-server-20170416 * @时间:2017-4-27 上午10:58:39 * @version 1.0 */ public class EmailSend { private MimeMessage mimeMsg; //MIME邮件对象 private Session session; //邮件会话对象 private Properties props; //系统属性 private boolean needAuth=false; //smtp是否需要认证 private String username=""; //smtp认证用户名和密码 private String password=""; private Multipart mp; //Multipart对象,邮件内容、标题、附件等内容 public EmailSend(){ //setSmtpHost(getConfig.mailHost); //如果没有指定有加你服务 createMimeMessage(); } public EmailSend(String smtp){ setSmtpHost(smtp); createMimeMessage(); } public void setSmtpHost(String hostName){ System.out.println("设置系统属性:mail.stmp.host="+hostName); if(props==null) props=System.getProperties(); //获取系统属性 props.put("mail.smtp.host",hostName); //设置SMTP主机 props.setProperty("mail.smtp.starttls.enable", "true"); //在邮箱中设置了SMTP服务开启后依然报530错误,一般是由于缺少这句代码引起的 } public boolean createMimeMessage(){ try{ System.out.println("准备获取邮件会话对象!"); session=Session.getDefaultInstance(props,null); }catch(Exception e){ System.err.println("获取邮件会话对象时发生错误!"+e); return false; } System.out.println("准备创建MIME邮件对象"); try{ mimeMsg =new MimeMessage(session);//创建MIME邮件对象 mp=new MimeMultipart(); return true; }catch(Exception e){ System.err.println("创建MIME邮件对象失败"+e); return false; } } public void setNeedAnth(boolean need){ System.out.println("设置smtp身份认证:mail.smtp.auth="+need); if(props==null) props=System.getProperties(); if(need){ props.put("mail.smtp.auth", "true"); }else{ props.put("mail.smtp.auth", false); } } public void setNamePass(String name,String pass){ username=name; password=pass; } public boolean setSubject(String mailSubject){ System.out.print("设置邮件主题"); try{ mimeMsg.setSubject(mailSubject); return true; }catch(Exception e){ System.err.println("设置邮件主题发生错误"); return false; } } /** * * @param companyName 公司名称 * @param appName 应用名称 * @param ContactName 联系人姓名 * @param num 联系人手机号 * @param email 联系人邮箱 * @param logoUrl logo图片的地址 * @return */ public boolean setBody(String companyName,String appName,String ContactName,String num,String email,String logoUrl){ try{ BodyPart bp=new MimeBodyPart(); //bp.setContent("<meta http-equiv=Content-Type content=text/html; charset=UTF-8/>"+mailBody+ "<img src=\"G://gwd.jpg\">","text/html;charset=gb2312"); bp.setContent( "<meta http-equiv=Content-Type content=text/html; charset=UTF-8/>"+ "尊敬的"+companyName+":"+"<br/>"+ "恭喜您的“"+appName+"应用”已经成功注册成为“公安部公民网络身份识别系统”的XXX应用!" +"<br/>"+ "您的注册信息见本邮件的附件。"+"<br/>"+"请注意妥善保存好您的注册信息!"+ "<h2>"+ContactName+"</h2>"+ "<h2>客户经理</h2>"+"<br/>"+ "<img src='"+logoUrl+"' width=\"120px\">"+"<br/>"+ //logoUrl为服务器上照片地址 "上海XXXXXX科技有限公司"+"<br/>"+ "手机:+86-"+num+"<br/>"+ "Email:"+"<a>"+email+"</a>"+"<br/>"+ "地址:上海市闵行区紫竹科技园区紫星路XXXX", "text/html;charset=gb2312"); mp.addBodyPart(bp); return true; }catch(Exception e){ System.err.println("设置邮件正文时发生错误!"+e); return false; } } /** * 添加附件 * @param filename * @return */ public boolean addFileAffix(String filename){ System.out.println("增加邮件附件:"+filename); try{ BodyPart bp=new MimeBodyPart(); FileDataSource fileds=new FileDataSource(filename); bp.setDataHandler(new DataHandler(fileds)); bp.setFileName(fileds.getName()); mp.addBodyPart(bp); return true; }catch(Exception e){ System.err.println("增加邮件附件"+filename+"发生错误:"+e); return false; } } public boolean setForm(String from){ System.out.println("设置发信人"); try{ mimeMsg.setFrom(new InternetAddress(from)); return true; }catch(Exception e){ return false; } } public boolean setTo(String to){ if(to==null) return false; try{ mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(to)); return true; }catch(Exception e){ return false; } } public boolean setCopyTp(String copyto){ if(copyto==null) return false; try{ mimeMsg.setRecipients(Message.RecipientType.CC, (Address[])InternetAddress.parse(copyto)); return true; }catch(Exception e){ return false; } } public boolean sendout(){ try{ mimeMsg.setContent(mp); //mimeMsg.saveChanges(); System.out.println("正在发送邮件...."); Session mailSession=Session.getInstance(props,null); Transport transport=mailSession.getTransport("smtp"); transport.connect((String)props.get("mail.smtp.host"),username,password); transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO)); System.out.println("发送邮件成功!"); transport.close(); return true; }catch(Exception e){ System.out.println("邮件发送失败!"+e); return false; } } /** * 发送邮件 * @param companyName 公司名称 * @param appName 应用名称 * @param contactName 联系人姓名 * @param num 联系人手机号 * @param contactEmail 联系人邮箱 * @param logoUrl logo图片地址 * @param title 邮件主题 * @param email 发件人 * @param passwd 邮件授权码 * @param toEmail 收件人 * @param enclosureName 附件路径 */ public Boolean sendToSomebody(String companyName,String appName,String contactName,String num,String contactEmail,String logoUrl,String title,String email,String passwd,String toEmail,String enclosureName ){ boolean bool=false; //指明让那个smtp转发 EmailSend themail=new EmailSend("smtp.qq.com"); //校验身份 themail.setNeedAnth(true); //邮件标题 if(themail.setSubject(title)==false) return bool; //将要发送的内容放入邮件体 if(themail.setBody(companyName,appName,contactName,num,contactEmail,logoUrl)==false) return bool; //发往哪里 if(themail.setTo(toEmail)==false) return bool; //谁发送的 if(themail.setForm("XXXXXXX@qq.com")==false) return bool; //发送附件 enclosureName=transferPath(enclosureName); if(themail.addFileAffix(enclosureName)==false) return bool; //将在163网站上的邮件用户名和密码放入邮件体 themail.setNamePass(email,passwd);//密码为授权码,不是邮件登录密码 //发送 if(themail.sendout()==false) return bool; bool=true; return bool; } /** * 将附件地址进行字符转义 * @param filepath 附件路径(包括附件名) * @return */ public String transferPath(String filepath){ filepath.replace("/", "//"); return filepath; } }
还没有评论,来说两句吧...