java发送邮件遇到的各种问题

javax.mail.NoSuchProviderException: Unable to locate provider for protocol:stmp

异常处理:

不要用环境自带的mail.jar;;;使用自己导入的javax.mail的jar包

maven配置:

 

 

 

昨天下午就码好了定时发送邮件的代码,用main方法测试的时候,发过去的邮件的附件一直是乱码,如图

妹的,一直出现无主题,附件为乱码,而且这哪里是附件????!!!!

在网上找来找去,也就那几种编码方式,挨着试过来,依旧是乱码,改了不下于10次,依旧这样...我那个**都碎了!

今天下午就没管他,正准备下班呢,想着把web项目运行下跑一下项目,......我擦,成了,有木有!!!

不多说,贴代码:

功能实现每天,每周一,每月定时发送邮件!!

定时器

ava定时器(java.util.Timer)有定时执行计划任务的功能,通过设定定时器的间隔时间,会自动在此间隔时间后执行预先安排好的任务(java.util. TimerTask)

如: 每隔一个小时执行任务 timer.schedule(TimerTask, 0, 60 * 60 * 1000);

schedule方法的第一个参数是需要执行的任务,此类的类型为java.util.TimerTask,第二个参数为执行任务前等待时间,此处0表示不等待,第三个参数为间隔时间,单位为毫秒

由于我们希望当Web工程启动时,定时器能自动开始计时,这样在整个Web工程的生命期里,就会定时的执行任务,因此启动定时器的类不能是一般的类,此处用Servlet的监听器类来启动定时器,通过在配置文件里配置此监听器, 让其在工程启动时自动加载运行,存活期为整个Web工程生命期.

  注:发送邮件要设置邮箱客户端,我用的是腾讯企业邮箱,因此

props.put("mail.smtp.host","smtp.exmail.qq.com");   中设置的是腾讯企业邮箱的电子信箱服务器 smtp.exmail.qq.com

import java.util.Calendar;
import java.util.Date;
import java.util.Properties;
import java.util.Timer;
import java.util.TimerTask;

import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;

import com.logger.util.HandleTime;

public class MyTimerTask implements ServletContextListener {
 private Timer timer = null;

 public void contextDestroyed(ServletContextEvent event) {
  timer.cancel();
  event.getServletContext().log("定时器销毁");
 }

 public void contextInitialized(ServletContextEvent event) {
  // 在这里初始化监听器,在tomcat启动的时候监听器启动,可以在这里实现定时器功能
  timer = new Timer(true);
  
  event.getServletContext().log("定时器已启动");// 添加日志,可在tomcat日志中查看到
  // 调用exportHistoryBean,0表示任务无延迟,5*1000表示每隔5秒执行任务,60*60*1000表示一个小时;
  timer.schedule(new MyEmail(event.getServletContext()), 0,
    24 * 60 * 60 * 1000);
  
//  判断到每天的 8:8:8
  if(HandleTime.judgeEveryDay()){
   event.getServletContext().log("定时器已启动");// 添加日志,可在tomcat日志中查看到
   // 调用exportHistoryBean,0表示任务无延迟,5*1000表示每隔5秒执行任务,60*60*1000表示一个小时;
   timer.schedule(new SendEveryDayEmail(event.getServletContext()), 0,
     24 * 60 * 60 * 1000);
  }
  
//  判断是周一的话
  if(HandleTime.judgeMonday()){
   event.getServletContext().log("定时器已启动");// 添加日志,可在tomcat日志中查看到
   // 调用exportHistoryBean,0表示任务无延迟,5*1000表示每隔5秒执行任务,60*60*1000表示一个小时;
   timer.schedule(new SendMondayEmail(event.getServletContext()), 0,
     7*24 * 60 * 60 * 1000);
  }
//  判断是一号
  if(HandleTime.judgeFirstDayOfMonth()){
   event.getServletContext().log("定时器已启动");// 添加日志,可在tomcat日志中查看到
   // 调用exportHistoryBean,0表示任务无延迟,5*1000表示每隔5秒执行任务,60*60*1000表示一个小时;
   timer.schedule(new SendFirstDayOfMonthEmail(event.getServletContext()), 0,
     60*24 * 60 * 60 * 1000);
  }
 }
}

 

发送邮件的类之一

import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.Properties;
import java.util.TimerTask;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
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.AddressException;
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;
import javax.servlet.ServletContext;

import com.logger.job.CreatExecl;

public class SendEveryDayEmail extends TimerTask {
 private ServletContext context = null;

 public SendEveryDayEmail(ServletContext context) {
  this.context = context;
 }

 @Override
 public void run() {
  System.out.println("正在发送邮件");

        Properties props=new Properties();
        props.put("mail.smtp.host","smtp.exmail.qq.com");//发件人使用发邮件的电子信箱服务器我使用的是163的服务器
        props.put("mail.smtp.auth","true");
        Session s=Session.getInstance(props);
        s.setDebug(true);
        MimeMessage message=new MimeMessage(s);
  try {
     //给消息对象设置发件人/收件人/主题/发信时间
   InternetAddress from = new InternetAddress("发件人邮箱");
   message.setFrom(from);
         InternetAddress to=new InternetAddress(" 发邮件的目的地(收件人信箱)
         message.setRecipient(Message.RecipientType.TO,to);
         message.setSubject(MimeUtility.encodeText("title","utf-8","B"));// ttitle为邮件的标题
         message.setSentDate(new Date());
        
         Multipart mm=new MimeMultipart();//新建一个MimeMultipart对象用来存放BodyPart对象(事实上可以存放多个)
        
//       设置信件文本内容
         BodyPart mdp=new MimeBodyPart();//新建一个存放信件内容的BodyPart对象
         mdp.setContent("邮件內容","text/html;charset=utf-8");//给BodyPart对象设置内容和格式/编码方式tcontent为邮件内容
         mm.addBodyPart(mdp);//将含有信件内容的BodyPart加入到MimeMultipart对象中(可以加入多个BodyPart)
       
//         設置信件的附件
         mdp = new MimeBodyPart();
        
//         创建用来传输的文件
         CreatExecl.creatUvAndPVAndIpExecl();
         String file = "d:\\job.xls";
         FileDataSource fds = new FileDataSource(file);
         DataHandler dh = new DataHandler(fds);
         int i = file.lastIndexOf("\\"); //提取文件名
         String fname = file.substring(i);
         mdp.setFileName(fds.getName());   //
         mdp.setFileName(MimeUtility.encodeText(fds.getName(),"utf-8","B"));  //
         mdp.setDataHandler(dh);
         mm.addBodyPart(mdp);
        
         message.setContent(mm);//把mm作为消息对象的内容
        
         message.saveChanges();
         Transport transport=s.getTransport("smtp");
         transport.connect("smtp.exmail.qq.com","
发邮件人帐户密码,此外是我的帐户密码,使用时请修改。
         transport.sendMessage(message,message.getAllRecipients());
         transport.close();
  } catch (AddressException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  } 
  catch (MessagingException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  catch (UnsupportedEncodingException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
  }
 }


}

 

最后定义配置文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
 xmlns="

http://java.sun.com/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
 http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <display-name></display-name> 
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
 
  <listener>
   <listener-class>com.shiyimm.logger.email.MyTimerTask</listener-class>
  </listener>
 
</web-app>

 

 

Over,安心下班喽!!!

 

 

 

 

 

 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值