发送邮件

最近搞一个项目,大体上就是注册需要时验证邮箱发验证码或者是超链接,sae上有一个Mail服务,很便捷,但不知道为何,邮件经常被当做垃圾邮件被退信。无奈之下,只能使用原生的,今天我写的,便是不借助于sae 的Mail服务,便可实现此功能。好处是方便移植程序,在本文我也会说明困扰开发者的集中java mail发送失败的两个常见问题。

1) Authentication类

package com.util.mail;  
import javax.mail.*;  
public class Authentication extends Authenticator{  
  String username=null;  
  String password=null;  
  
  public Authentication(){  
  }  
  public Authentication(String username, String password) {  
  this.username = username;  
  this.password = password;  
  }  
  protected PasswordAuthentication getPasswordAuthentication(){
  PasswordAuthentication pa = new PasswordAuthentication(username, password);
  return pa;
  }  
}  

2 ) MailSend 类

package com.util.mail;  
import java.util.Date;  
import java.util.Properties;  
import javax.mail.Address;  
import javax.mail.BodyPart;  
import javax.mail.Message;  
import javax.mail.MessagingException;  
import javax.mail.Multipart;  
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;
public class MailSender  {  
/**  
  * 以文本格式发送邮件  
  */  
  public boolean sendTextMail(SendMail mailInfo) {  
  // 判断是否需要身份认证  
  Authentication authenticator = null;  
  Properties pro = mailInfo.getProperties();  
  if (mailInfo.isValidate()) {  
  // 如果需要身份认证,则创建一个密码验证器  
  authenticator = new Authentication(mailInfo.getUserName(), mailInfo.getPassword());  
  }  
  // 根据邮件会话属性和密码验证器构造一个发送邮件的session  
  Session sendMailSession = Session.getDefaultInstance(pro,authenticator);  
  try {
  Message mailMessage = new MimeMessage(sendMailSession);
  Address from = new InternetAddress(mailInfo.getFromAddress());
  mailMessage.setFrom(from);
  Address to = new InternetAddress(mailInfo.getToAddress());  
  mailMessage.setRecipient(Message.RecipientType.TO,to);
  mailMessage.setSubject(mailInfo.getSubject());
  mailMessage.setSentDate(new Date());
  String mailContent = mailInfo.getContent();  
  mailMessage.setText(mailContent);
  Transport.send(mailMessage);  
  return true;  
  } catch (MessagingException ex) {  
  ex.printStackTrace();  
  }  
  return false;  
  }
  /**  
  * 以HTML格式发送邮件  
  */  
  public boolean sendHtmlMail(SendMail mailInfo){  
  // 判断是否需要身份认证  
  Authentication authenticator = null;  
  Properties pro = mailInfo.getProperties();
  if (mailInfo.isValidate()) {  
  authenticator = new Authentication(mailInfo.getUserName(), mailInfo.getPassword());  
  }  
  // 根据邮件会话属性和密码验证器构造一个发送邮件的session  
  Session sendMailSession = Session.getDefaultInstance(pro,authenticator);  
  try {  
  // 根据session创建一个邮件消息  
  Message mailMessage = new MimeMessage(sendMailSession);
  Address from = new InternetAddress(mailInfo.getFromAddress());
  mailMessage.setFrom(from);
  Address to = new InternetAddress(mailInfo.getToAddress());  
  // Message.RecipientType.TO属性表示接收者的类型为TO  
  mailMessage.setRecipient(Message.RecipientType.TO,to);
  mailMessage.setSubject(mailInfo.getSubject());
  mailMessage.setSentDate(new Date());
  Multipart mainPart = new MimeMultipart();
  BodyPart html = new MimeBodyPart();
  html.setContent(mailInfo.getContent(), "text/html; charset=utf-8");  
  mainPart.addBodyPart(html);
  mailMessage.setContent(mainPart);
  Transport.send(mailMessage);  
  return true;  
  } catch (MessagingException ex) {  
  ex.printStackTrace();  
  }  
  return false;  
  }  
}  

3)SendMail类

package com.util.mail;  
import java.util.Properties;  
public class SendMail {  
  // 发送邮件的服务器的IP和端口  
  private String mailServerHost;  
  private String mailServerPort = "25";  
  private String fromAddress;  
  private String toAddress;  
  private String userName;  
  private String password;  
  private boolean validate = false;  
  private String subject;  
  private String content;  
  private String[] attachFileNames;  
  /**  
  * 获得邮件会话属性  
  */  
  public Properties getProperties(){  
  Properties p = new Properties();  
  p.put("mail.smtp.host", this.mailServerHost);  
  p.put("mail.smtp.port", this.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 boolean isValidate() {  
  return validate;  
  }  
  public void setValidate(boolean validate) {  
  this.validate = validate;  
  }  
  public String[] getAttachFileNames() {  
  return attachFileNames;  
  }  
  public void setAttachFileNames(String[] fileNames) {  
  this.attachFileNames = fileNames;  
  }  
  public String getFromAddress() {  
  return fromAddress;  
  }  
  public void setFromAddress(String fromAddress) {  
  this.fromAddress = fromAddress;  
  }  
  public String getPassword() {  
  return password;  
  }  
  public void setPassword(String password) {  
  this.password = password;  
  }  
  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 getSubject() {  
  return subject;  
  }  
  public void setSubject(String subject) {  
  this.subject = subject;  
  }  
  public String getContent() {  
  return content;  
  }  
  public void setContent(String textContent) {  
  this.content = textContent;  
  }  
}  

以上三个文件,来自网络上众多大神们之手,后经我实验,完全木有任何问题,大家可复制粘贴,即可用

最后一个便是调用函数

package send;
import com.util.mail.SendMail;
import com.util.mail.MailSender;
public class Send {
  
  public static void main(String[] args){  
  //设置邮件参数  
  SendMail mail = new SendMail();  
  mail.setMailServerHost("smtp.qq.com"); //这里填发送者的邮箱服务器,我以qq举个例子  
  mail.setMailServerPort("25");  
  mail.setValidate(true);  
  mail.setUserName("发送者的邮箱名字");  
  mail.setPassword("发送者邮箱密码");
  mail.setFromAddress("发送者邮箱名字");  
  mail.setToAddress("接受者邮箱密码");  
  mail.setSubject("标题");
  mail.setContent("内容");  
  //发送邮件  
  MailSender sms = new MailSender();  
  sms.sendTextMail(mail);//发送文体格式  
  sms.sendHtmlMail(mail);//发送html格式  
  }  
}

以上是发送java mail的详细代码,下面是我总结出来的几个发不出去的问题:

1.邮箱申请时间问题

刚刚申请的邮箱十有八九是不能够发送邮件的,因为邮件服务需要用的POP3/SMTP服务在邮箱刚申请完成时还未完全打开。

要想有保障,应使用时间长一点的邮箱来发送邮件,当然,接受者无所谓时间长短了。

2.邮箱设置问题,下面以qq邮箱为例,简单示范一下

先找到邮箱设置,点击账户,把上面那几个服务都打开

我已试过在servlet中结合jsp,成功发送mail。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值