一个发邮件的类,带验证功能,可以发html内容,可以添加附件,并解决附件乱码问题。

转载 2006年05月23日 12:34:00

//文件Mail.java 该文件内容部分综合网上的资源,自己进行了改进,转载请注明 汪建伟。

package sendmail;

import java.io.UnsupportedEncodingException;
import java.util.Properties;
import java.util.Date;
import java.util.ArrayList;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import java.net.MalformedURLException;
import java.net.URL;
/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Company: Peking University </p>
 * @author 汪建伟
 * @version 1.0
 */

public  class Mail{
   
    protected ArrayList bodypartArrayList=null;
    protected Multipart multipart = null;
    protected MimeMessage mailMessage = null;
    protected Session mailSession = null;
    protected Properties mailProperties = System.getProperties();
    protected InternetAddress mailFromAddress = null;
    protected InternetAddress mailToAddress = null;
    protected String mailSubject ="";
    protected Date mailSendDate = null;
    private String smtpserver="";
    private String name="";
    private String password="";
   
    public Mail(String smtpHost,String username,String password){
     smtpserver=smtpHost;
     name=username;
     this.password=password;
        mailProperties.put("mail.smtp.host",smtpHost);
        mailProperties.put("mail.smtp.auth","true"); //设置smtp认证,很关键的一句
        mailSession = Session.getDefaultInstance(mailProperties);
        //mailSession.setDebug(true);
       
        mailMessage = new MimeMessage(mailSession);
        multipart = new MimeMultipart();
        bodypartArrayList=new ArrayList();//用来存放BodyPart,可以有多个BodyPart!
    }
    //设置邮件主题
    public void setSubject(String mailSubject)throws MessagingException{
        this.mailSubject = mailSubject;
        mailMessage.setSubject(mailSubject);
    }
    //设置邮件发送日期
    public void setSendDate(Date sendDate)throws MessagingException{
        this.mailSendDate = sendDate;
        mailMessage.setSentDate(sendDate);
    }
    //发送纯文本
    public void addTextContext(String textcontent)throws MessagingException{
     BodyPart bodypart=new MimeBodyPart();
     bodypart.setContent(textcontent,"text/plain;charset=GB2312");
     bodypartArrayList.add(bodypart);
    }
    //发送Html邮件
    public void addHtmlContext(String htmlcontent)throws MessagingException{
     BodyPart bodypart=new MimeBodyPart();
     bodypart.setContent(htmlcontent,"text/html;charset=GB2312");
     bodypartArrayList.add(bodypart);
    }
    //将文件添加为附件
    public void addAttachment(String FileName/*附件文件名*/,String DisplayFileName/*在邮件中想要显示的文件名*/)
        throws MessagingException,UnsupportedEncodingException{
     BodyPart bodypart=new MimeBodyPart();
        FileDataSource fds=new FileDataSource(FileName);
       
        DataHandler dh=new DataHandler(fds);
        String displayfilename="";
  displayfilename = MimeUtility.encodeWord(DisplayFileName,"gb2312", null);//对显示名称进行编码,否则会出现乱码!
  
  bodypart.setFileName(displayfilename);//可以和原文件名不一致
        bodypart.setDataHandler(dh);
     bodypartArrayList.add(bodypart);
    }
    //将byte[]作为文件添加为附件
    public void addAttachmentFrombyte(byte[] filebyte/*附件文件的字节数组*/,String DisplayFileName/*在邮件中想要显示的文件名*/)
        throws MessagingException,UnsupportedEncodingException{
     BodyPart bodypart=new MimeBodyPart();
     ByteDataSource fds=new ByteDataSource(filebyte,DisplayFileName);
      
        DataHandler dh=new DataHandler(fds);
        String displayfilename="";
  displayfilename = MimeUtility.encodeWord(DisplayFileName,"gb2312", null);//对显示名称进行编码,否则会出现乱码!
  
  bodypart.setFileName(displayfilename);//可以和原文件名不一致
        bodypart.setDataHandler(dh);
     bodypartArrayList.add(bodypart);
    }

   
    //使用远程文件(使用URL)作为信件的附件
    public void addAttachmentFromUrl(String url/*附件URL地址*/,String DisplayFileName/*在邮件中想要显示的文件名*/)
        throws MessagingException,MalformedURLException,UnsupportedEncodingException{
     BodyPart bodypart=new MimeBodyPart();
        //用远程文件作为信件的附件
        URLDataSource ur= new URLDataSource(new URL(url));
        //注:这里用的参数只能为URL对象,不能为URL字串
  DataHandler dh=new DataHandler(ur);
  String displayfilename="";
        displayfilename=MimeUtility.encodeWord(DisplayFileName,"gb2312", null);
  bodypart.setFileName(displayfilename);//可以和原文件名不一致
  bodypart.setDataHandler(dh);
  bodypartArrayList.add(bodypart);
    }

   
    //设置发件人地址
    public void setMailFrom(String mailFrom)throws MessagingException{
        mailFromAddress = new InternetAddress(mailFrom);
        mailMessage.setFrom(mailFromAddress);
    }
    //设置收件人地址,收件人类型为to,cc,bcc(大小写不限)
    public void setMailTo(String[] mailTo,String mailType)throws Exception{
        for(int i=0;i<mailTo.length;i++){
            mailToAddress = new InternetAddress(mailTo[i]);
            if(mailType.equalsIgnoreCase("to")){
                mailMessage.addRecipient(Message.RecipientType.TO,mailToAddress);
            }
            else if(mailType.equalsIgnoreCase("cc")){
                mailMessage.addRecipient(Message.RecipientType.CC,mailToAddress);
            }
            else if(mailType.equalsIgnoreCase("bcc")){
                mailMessage.addRecipient(Message.RecipientType.BCC,mailToAddress);
            }
            else{
                throw new Exception("Unknown mailType: "+mailType+"!");
            }
        }
    }
    //开始投递邮件
    public void sendMail()throws MessagingException,SendFailedException{
     for (int i=0;i<bodypartArrayList.size();i++) {
      multipart.addBodyPart((BodyPart)bodypartArrayList.get(i)); 
     }
     mailMessage.setContent(multipart);
        mailMessage.saveChanges();
        Transport transport=mailSession.getTransport("smtp");
        transport.connect(smtpserver,name,password);//以smtp方式登录邮箱
        transport.sendMessage(mailMessage,mailMessage.getAllRecipients());
        //发送邮件,其中第二个参数是所有已设好的收件人地址
        transport.close();
    }

}

//文件 ByteDataSource.java 该文件内容由汪建伟原创。转载请注明!

package sendmail;


/**
 * <p>Title: </p>
 * <p>Description: 发邮件</p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Company: Peking University </p>
 * @author 汪建伟
 * @version 1.0
 */
import javax.activation.DataSource;
import java.io.*;
public class ByteDataSource implements DataSource{
 private byte[] filebyte=null;
    private String filetype="application/octet-stream";
    private String filename="";
    private OutputStream outputstream=null;
    private InputStream  inputstream=null;
    public ByteDataSource() {
    }
    public ByteDataSource(String FileName) {
     File f=new File(FileName);
      filename=f.getName();
     try {
   inputstream = new FileInputStream(f);
   inputstream.read(filebyte);
   
  } catch (Exception e) {
  }
  
    }

    public ByteDataSource(byte[] filebyte,String displayfilename) {
        this.filebyte=filebyte;
        this.filename=displayfilename;
    }
    public String getContentType() {
        return filetype;
    }

    public InputStream getInputStream() throws IOException {
     InputStream input=new ByteArrayInputStream(filebyte);
        return input;
    }

    public String getName() {
        return filename;
    }

    public OutputStream getOutputStream() throws IOException {
     
     outputstream.write(filebyte);
        return outputstream;
    }
}
//newSendMail.java 发邮件示例

  package sendmail;


/**
 * <p>Title: </p>
 * <p>Description: 发邮件示例</p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Company: Peking University </p>
 * @author 汪建伟
 * @version 1.0
 */

import java.io.FileWriter;
import java.io.IOException;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.io.PrintWriter;
import java.io.BufferedWriter;
import java.io.*;
public class newSendMail {
  public static void main(String[] args) {
     Mainprogram1 w1= new Mainprogram1();
 
     w1.sendmail() ;
 
  
  }
}

class Mainprogram1{
 
  private  java.util.Date sysdate;
  Mainprogram1(){
      //获取要查询的起止时间
      sysdate = new java.util.Date();
     }

  public void sendmail(){ //创建邮件发送实例,发送邮件
    String smtp = "smtp.163.com";//邮件服务器地址
    String mailname = "";//连接邮件服务器的用户名
    String mailpsw = "";//连连接邮件服务器的用户密码
    String mailto = "";// 接收邮件的地址
    String copyto = "";// 抄送邮件的地址
    String mailfrom = "";// 发送邮件的地址
    String mailtitle = "测试邮件标题";// 邮件的标题
     //请根据实际情况赋值
    Mail mymail= new Mail(smtp,mailname, mailpsw);
    String mto[]={mailto};
    String mcc[]={copyto};
    try{
       mymail.setMailFrom(mailfrom);
       mymail.setSendDate(new Date());
       mymail.setMailTo(mto,"to");
       if (!copyto.matches("")){ //如果抄送不为空,则将信件抄送给copyto
           mymail.setMailTo(mcc,"cc");
       }
       mymail.setSubject(mailtitle);
       mymail.addTextContext("邮件内容");
       mymail.addHtmlContext("html内容");
       mymail.addAttachment("c://测试附件.doc","测试附件.doc");
       mymail.addAttachmentFromUrl("http://162.105.109.163/getimg?imgid=148","图片文件.jpg");
       mymail.addAttachmentFromUrl("http://www.pku.edu.cn","北大主页.htm");
      
       //下面的附件内容来自一个byte[]类型,增加这个方法的意图在于如果在web模式下发邮件,就不用生成临时文件
       //直接将上载的文件保存成byte[]格式,然后使用该方法添加到邮件的附件中,进行发送
       InputStream inputStream=null;
     try {
     File imageFile = new File("c://1.jpg");
         inputStream = new FileInputStream(imageFile);
      } catch(IOException ei){}
  
    try {
     byte[] b=new byte[inputStream.available()];
   
     inputStream.read(b);
     mymail.addAttachmentFrombyte(b,"来自byte的附件.jpg");
    
  
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
      
      
      
       mymail.sendMail() ;
       WriteinfoToFile("邮件发出!");
    }
    catch (Exception ex){ WriteinfoToFile("邮件发送失败!"+ex.toString());}
  }

   //向ini文件中写提示信息
  private void WriteinfoToFile(String info){
    try{
      PrintWriter pw = new PrintWriter(new BufferedWriter(new FileWriter("mailinfo.txt",true)));
      pw.println(sysdate.toString()+" "+info);
      pw.close();
    }
    catch(IOException ei){
      System.out.println(sysdate.toString()+ " 向mailinfo.txt文件中写数据错误:"+ei.toString());
      System.exit(0);
    }
  }
}

一个发邮件的类,带验证功能,可以发html内容,可以添加附件,并解决附件乱码问题。

//文件Mail.java 该文件内容部分综合网上的资源,自己进行了改进,转载请注明 汪建伟。package sendmail;import java.io.UnsupportedEncodingEx...

php的IMAP的应用实例(实现收发邮件、删除邮件、附件下载等功能,解决中文乱码问题)

1、Mail类   /**  * NOTICE OF LICENSE  *  * THIS SOURCE FILE IS PART OF EVEBIT'S PRIVATE PRO...
  • gayayzy
  • gayayzy
  • 2011年12月30日 15:30
  • 1459

php的IMAP的应用实例(实现收发邮件、删除邮件、附件下载等功能,解决中文乱码问题)

(本人没有用这个)1、Mail类   /**  * NOTICE OF LICENSE  *  * THIS SOURCE FILE IS PART OF EVEBIT'S PRIV...
  • gayayzy
  • gayayzy
  • 2011年12月29日 14:27
  • 1149

python邮件发送(带附件,解决中文乱码问题)

#-*- encoding: utf-8 -*- #导入smtplib和MIMEText import smtplib from email.Header import Header from ...
  • betry
  • betry
  • 2011年08月03日 16:53
  • 12058

使用PHPMailer发送带附件并支持HTML内容的邮件

PHPMailer是一个封装好的PHP邮件发送类,支持发送HTML内容的电子邮件,以及可以添加附件发送,并不像PHP本身mail()函数需要服务器环境支持,您只需要设置邮件服务器以相关信息就能实现邮件...

完美解决邮件中excel乱码问题<mac 附件乱码>

之前在前期的开发过程中 也发送过excel 后来自己使用mac以后 发现有乱码 所以有必要记录下来 /** * 格式化表格 */ public function f...

使用PHPMailer发送带附件并支持HTML内容的邮件

PHPMailer是一个封装好的PHP邮件发送类,支持发送HTML内容的电子邮件,以及可以添加附件发送,并不像PHP本身mail()函数需要服务器环境支持,您只需要设置邮件服务器以相关信息就能实现邮件...

非典型 JavaMail 邮件附件名乱码问题

------------  记一个JavaMail 附件乱码的问题      说到乱码,很多人都遇到过,“哎呀,你这个编码是不是UTF-8!”,“你这个会不会操作系统不一致导致的...
  • wty19
  • wty19
  • 2016年01月29日 15:18
  • 1385

非典型 JavaMail 邮件附件名乱码问题

遇到了这个问题,所以标记一下,感谢:http://blog.csdn.net/wty19/article/details/50607411———— 记一个JavaMail 附件乱码的问题 说到乱码,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章: 一个发邮件的类,带验证功能,可以发html内容,可以添加附件,并解决附件乱码问题。
举报原因:
原因补充:

(最多只允许输入30个字)