javamail 发送mail,不多解释,看了就懂

/*
 * RecieveMail.java
 *
 * Created on 2008.7.9, pm2:40
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package mail;

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;
import java.io.*;
/**
 * @author user
 *
 * この生成されたコメントの挿入されるテンプレートを変更するため
 * ウィンドウ > 設定 > Java > コード生成 > コードとコメント
 */
public class RecieveMail {
    
    private String _popServer = "";
    private String _popUser = "";
    private String _popPassword = "";
    
    public void getMails(){
        try{
            //recieve mail
            receive();
        }catch (Exception ex){
            Logger.println("Usage: java com.lotontech.mail.POPMail"+" popServer popUser popPassword");
        }
    }
    
    private void receive(){
        Store store=null;
        Folder folder=null;
        try{
            //prepare to open mails pool
            Properties props = System.getProperties();
            Session session = Session.getDefaultInstance(props, null);
            store = session.getStore("pop3");
            store.connect(_popServer, _popUser, _popPassword);
            folder = store.getDefaultFolder();
            if (folder == null) throw new Exception("No default folder");
            folder = folder.getFolder("INBOX");
            if (folder == null) throw new Exception("No POP3 INBOX");
            
            //inbox folder 
            //make it writeable
            folder.open(Folder.READ_WRITE);
            //array mails in msgs
            Message[] msgs = folder.getMessages();
            for (int msgNum = 0; msgNum < msgs.length; msgNum++){
                //read mail
                Logger.println("this the " + (msgNum + 1) + " mail in the server INBOX");
                printMessage(msgs[msgNum]);
                checkMessage(msgs[msgNum]);
                //delete readen mail
                msgs[msgNum].setFlag(Flags.Flag.DELETED,true);
            }
        }catch (Exception ex){
            Logger.println(ex.getMessage());
        } finally{
            try{
                //set true to affirm the operation
                if (folder!=null) folder.close(true);
                if (store!=null) store.close();
            }catch (Exception ex2) {
                Logger.println(ex2.getMessage());
            }
        }
    }
    private void printMessage(Message message){
        try{
            Logger.println("mail info ------start------");
            //from address
            String from=((InternetAddress)message.getFrom()[0]).getPersonal();
            if (from==null) from=((InternetAddress)message.getFrom()[0]).getAddress();
            Logger.println("FROM: "+from);
            
            //subject
            String subject=message.getSubject();
            Logger.println("SUBJECT: "+subject);
            
            //headers
            String[] header=message.getHeader("X-IFArea");
            if(header.length > 0) Logger.println("X-IFArea: "+header[0]);
            
            //content
            Part messagePart=message;
            Object content=messagePart.getContent();
            if (content instanceof Multipart){
                for(int m = 0; m < ((Multipart)content).getCount(); m++){
                    if(((Multipart) content).getBodyPart(m).getFileName() != null){
                        Logger.println("affix: "+((Multipart) content).getBodyPart(m).getFileName());
                    }
                }
            }
            Logger.println("mail info ------end------");
        }catch (Exception ex){
            Logger.println(ex.getMessage());
        }
    }
    
    private void checkMessage(Message message){
        try{
            //subject
            String subject=message.getSubject();
            
            //headers
            String[] header=message.getHeader("X-IFArea");
            if(header.length < 1) throw new Exception("mail check error, there is no X-IFArea");
            String x_IFArea = header[0];
            
            //error reports
            List x_err_IFAreas = new ArrayList();
            for(int i = 1; i <= 3; i++){
                String[] error = message.getHeader("X-Ex" + i + "-IFArea");
                if(error != null && error.length > 0)
                    x_err_IFAreas.add("X-Ex" + i + "-IFArea"+error[0]);
            }
            
            //content
            Part messagePart=message;
            Object content=messagePart.getContent();
            List files = new ArrayList();
            if (content instanceof Multipart){
                for(int fileNumber = 0; fileNumber < ((Multipart) content).getCount(); fileNumber++){
                    messagePart = ((Multipart)content).getBodyPart(fileNumber);
                    if(messagePart.getFileName() == null) continue;
                    BlobData data = new BlobData();
                    data.setBlobName(messagePart.getFileName());
                    data.setStream(messagePart.getInputStream());
                    
                    files.add(data);
                }
                
            }
            
            //create TransmitIncepters to deal the message
            String className = "";
            Property property = Property.getInstance();
            //
            if(subject.equalsIgnoreCase(property.getProperty("titleRegist").trim())){
                className = CONSTANT.mail_class_Regist;
            }else if(subject.equalsIgnoreCase(property.getProperty("titleDeleteRegist").trim())){
                className = CONSTANT.mail_class_DeleteRegist;
            }else if(subject.equalsIgnoreCase(property.getProperty("titleAccept").trim())){
                className = CONSTANT.mail_class_Accept;
            }else{
                throw new Exception("wrong title, can not incept the mail to db");
            }
            
            //desine for only get the name from subject string
            TransmitIncepter incepter = TransmitIncepter.getInstance(className);
            incepter.setSubject(subject);
            incepter.setX_IFArea(x_IFArea);
            incepter.setX_err_IFAreaList(x_err_IFAreas);
            incepter.setFileList(files);
            incepter.setSentDate(message.getSentDate());
            incepter.run();
            
        }catch (Exception ex){
            Logger.println(ex.getMessage());
        }
    }
    
    public void setPopServer(String popServer){
        _popServer = popServer;
    }
    
    public void setPopUser(String popUser){
        _popUser = popUser;
    }
    
    public void setPopPassword(String popPassword){
        _popPassword = popPassword;
    }
}


/*
 * SendMail.java
 *
 * Created on 2008.7.9, am11:47
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package mail;

import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import java.util.Date;
import javax.activation.*;
import oracle.sql.BLOB;
import java.io.*;

public class SendMail {
    
    private MimeMessage mimeMsg;
    
    private Session session;
    
    private Properties props; //プロパティ
    
    private boolean needAuth = false; //smtpのパスワード検証フラグ
    
    private String username = ""; //smtp認証名
    private String password = ""; //smtp認証パスワード
    
    private Multipart mp; //Multipart対象,メール内容,表題,添付ファイルなどを含むMimeMessage対象
    
    /**
     *
     *
     *
     */
    
    public SendMail() {
        
        setSmtpHost(""); //サーバを設定しなければ、プロパティファイルから読取
        
        createMimeMessage();
        
    }
    
    public SendMail(String smtp) {
        
        setSmtpHost(smtp);
        
        createMimeMessage();
        
    }
    
    /**
     *
     * @param hostName String
     *
     */
    
    public void setSmtpHost(String hostName) {
        
        Logger.println("system property:mail.smtp.host = " + hostName);
        
        if (props == null)
            props = System.getProperties(); //プロパティファイル対象
        
        props.put("mail.smtp.host", hostName); //SMTPサーバ名
        
    }
    
    /**
     *
     * @return boolean
     *
     */
    
    public boolean createMimeMessage() {
        
        try {
            
            Logger.println("prepare to read mail body object");
            session = Session.getDefaultInstance(props, null); //メール会話対象
            
        } catch (Exception e) {
            
            System.err.println("error ecured in getting mail body " + e);
            
            return false;
            
        }
        
        Logger.println("create mime mail body!");
        
        try {
            
            mimeMsg = new MimeMessage(session); //mime対象生成
            
            mp = new MimeMultipart();
            
            return true;
            
        } catch (Exception e) {
            
            System.err.println("fail to create mime body" + e);
            
            return false;
            
        }
        
    }
    
    /**
     *
     * @param need boolean
     *
     */
    
    public void setNeedAuth(boolean need) {
        
        Logger.println("config smtp auth: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");
            
        }
        
    }
    
    /**
     *
     * @param name String
     *
     * @param pass String
     *
     */
    
    public void setNamePass(String name, String pass) {
        
        username = name;
        
        password = pass;
        
    }
    
    /**
     *
     * @param mailSubject String
     *
     * @return boolean
     *
     */
    
    public boolean setSubject(String mailSubject) {
        
        Logger.println("config mail subject");
        
        try {
            
            mimeMsg.setSubject(mailSubject);
            return true;
            
        } catch (Exception e) {
            
            System.err.println("fail to config mail subject");
            
            return false;
            
        }
        
    }
    
    /**
     *
     * @param mailSubject String
     *
     * @return boolean
     *
     */
    
    public boolean setHeader(String name, String context) {
        
        Logger.println("config mail header :" + name);
        
        try {
            
            mimeMsg.setHeader(name,context);
            return true;
            
        } catch (Exception e) {
            
            System.err.println("fail to config mail header");
            
            return false;
            
        }
        
    }
    
    /**
     *
     * @param mailBody String
     *
     */
    
    public boolean setBody(String mailBody) {
        
        try {
            
            BodyPart bp = new MimeBodyPart();
            bp.setContent(
                    "<meta http-equiv=Content-Type content=text/html; charset=iso-2022-jp>"
                    + mailBody,
                    "text/html;charset=iso-2022-jp");
            mp.addBodyPart(bp);
            
            return true;
            
        } catch (Exception e) {
            
            System.err.println("config mail main body" + e);
            
            return false;
            
        }
        
    }
    
    public boolean addFileAffix(String filename,BLOB blob) {
        
        Logger.println("add file affix:" + filename);
        
        try {
            
            BodyPart bp = new MimeBodyPart();
            
            BlobDataSource streamds = new BlobDataSource(filename,blob);
            
            bp.setDataHandler(new DataHandler(streamds));
            
            bp.setFileName(streamds.getName());
            
            bp.setHeader("Content-Transfer-Encoding","base64");
            
            mp.addBodyPart(bp);
            
            return true;
            
        } catch (Exception e) {
            
            System.err.println("add file affix:" + filename + " error ecured" + e);
            
            return false;
            
        }
        
    }
    
    public boolean addFileAffix(String filename) {
        
        Logger.println("add file affix:" + 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("add file affix:" + filename + " error ecured" + e);
            
            return false;
            
        }
        
    }
    
    public boolean addFileAffix(BlobData[] blobs) {
        try {
            for(int i = 0; i < blobs.length; i++){
                Logger.println("add file affix:" + blobs[i].getBlobName());
                
                BodyPart bp = new MimeBodyPart();

                BlobDataSource streamds = new BlobDataSource(blobs[i].getBlobName(),blobs[i].getBlob());

                bp.setDataHandler(new DataHandler(streamds));

                bp.setFileName(streamds.getName());

                mp.addBodyPart(bp);
                
            }
            
            return true;
            
        } catch (Exception e) {
            
            System.err.println("add file affix, error ecured " + e);
            
            return false;
            
        }
        
    }
    
    /**
     *
     * @param name String
     *
     * @param pass String
     *
     */
    
    public boolean setFrom(String from) {
        
        Logger.println("set fromer!");
        try {
            
            mimeMsg.setFrom(new InternetAddress(from)); //送信メールアドレス設定
            return true;
            
        } catch (Exception e) {
            return false;
        }
        
    }
    
    /**
     *
     * @param name String
     *
     * @param pass String
     *
     */
    
    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;
        }
        
    }
    
    /**
     *
     * @param name String
     *
     * @param pass String
     *
     */
    
    public boolean setCopyTo(String copyto) {
        
        if (copyto == null)
            return false;
        
        try {
            
            mimeMsg.setRecipients(
                    Message.RecipientType.CC,
                    (Address[]) InternetAddress.parse(copyto));
            
            return true;
            
        } catch (Exception e) {
            return false;
        }
        
    }
    
    /**
     *
     * @param name String
     *
     * @param pass String
     *
     */
    
    public boolean sendout() {
        
        try {
            
            mimeMsg.setContent(mp);
            
            mimeMsg.saveChanges();
            
            Logger.println("sending mail....");
            
            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));
            
            //transport.send(mimeMsg);
            
            Logger.println("sending mail succeed!");
            
            transport.close();
            
            return true;
        } catch (Exception e) {
            System.err.println("Fail to send mail!" + e);
            return false;
        }
        
    }
}
 
 
在接受mail附件的时候,适用的是输入流,这里,容易产生多余的东西,在读取输入流时,最好使用while((int = in.read()) != -1)来接获真是长度,否则文件将被增加一些莫名其妙的空格。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值