亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java實現(xiàn)批量發(fā)送帶附件的郵件代碼

 更新時間:2022年01月02日 10:44:34   作者:超級棒的科技  
大家好,本篇文章主要講的是Java實現(xiàn)批量發(fā)送帶附件的郵件代碼,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽

前言

       新功能上線時要經(jīng)常發(fā)包到測試或生產(chǎn)服務(wù)器進行模塊部署,但由于安全限制只能通過郵件傳輸小于10M的附件這種方式把jar包上傳到服務(wù)器。所以往往要發(fā)送幾十個郵件手動發(fā)送比較麻煩,偷懶寫了個粘貼即用的Demo,如有不足,請多指教! 

實體類(注意注釋)

代碼詳情如下:

package Email;
/*
* 參數(shù)實體類
* */
public class EmailParameter {
    //發(fā)信郵箱
    private String fromMailbox;
    //發(fā)信郵箱密碼(獨立郵箱填寫密碼,163或qq等第三方郵箱填寫授權(quán)碼)
    private String fromMailboxPWD;
    //收信郵箱
    private String toMailbox;
    //附件在本機下的目錄路徑
    private String enclosurePath;
    //郵箱主機(如QQ郵箱是smtp.qq.com、163郵箱是smtp.163.com)
    private String host;
    //與上一次發(fā)送郵件間隔時間 默認5秒
    private long sleepTime = 5000;
    //郵件發(fā)送成功后給本地文件打的成功標識
    private String successTag;
 
    public String getSuccessTag() {
        return successTag;
    }
 
    public void setSuccessTag(String successTag) {
        this.successTag = successTag;
    }
 
    public String getFromMailbox() {
        return fromMailbox;
    }
 
    public void setFromMailbox(String fromMailbox) {
        this.fromMailbox = fromMailbox;
    }
 
    public String getFromMailboxPWD() {
        return fromMailboxPWD;
    }
 
    public void setFromMailboxPWD(String fromMailboxPWD) {
        this.fromMailboxPWD = fromMailboxPWD;
    }
 
    public String getToMailbox() {
        return toMailbox;
    }
 
    public void setToMailbox(String toMailbox) {
        this.toMailbox = toMailbox;
    }
 
    public String getEnclosurePath() {
        return enclosurePath;
    }
 
    public void setEnclosurePath(String enclosurePath) {
        this.enclosurePath = enclosurePath;
    }
 
    public String getHost() {
        return host;
    }
 
    public void setHost(String host) {
        this.host = host;
    }
 
    public long getSleepTime() {
        return sleepTime;
    }
 
    public void setSleepTime(long sleepTime) {
        this.sleepTime = sleepTime;
    }
 
    @Override
    public String toString() {
        return "EmailParameter{" +
                "fromMailbox='" + fromMailbox + '\'' +
                ", fromMailboxPWD='" + fromMailboxPWD + '\'' +
                ", toMailbox='" + toMailbox + '\'' +
                ", enclosurePath='" + enclosurePath + '\'' +
                ", host='" + host + '\'' +
                ", sleepTime=" + sleepTime +
                ", successTag='" + successTag + '\'' +
                '}';
    }
}

實現(xiàn)類

       在確認程序運行完或發(fā)送故障報錯后那些本地郵件已被發(fā)送那些本地文件未被發(fā)送時,我代碼中用的是修改文件名的方式。這種方式方便但會有弊端,當你要發(fā)送的附件文件為被分卷切分后的文件時,文件名被修改會導致該分卷切分文件不能被正常解壓提取。建議用生成txt文件的方式記錄已發(fā)送文件的文件名。

代碼詳情如下:

package Email;
 
import com.sun.mail.util.MailSSLSocketFactory;
import org.springframework.util.StringUtils;
 
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;
import java.io.File;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/*
* 編輯并發(fā)送郵件Service
* */
public class EmailsServiceImpl {
    public String sendEmails(EmailParameter parameter){
        if(!this.isMailbox(parameter.getFromMailbox())){
            return "發(fā)信郵箱格式不正確";
        }
        if(!this.isMailbox(parameter.getToMailbox())){
            return "收信郵箱格式不正確";
        }
        try{
            //獲取郵件主機系統(tǒng)屬性
            Properties properties = System.getProperties();
            //設(shè)置郵件服務(wù)器
            properties.setProperty("mail.smtp.host", parameter.getHost());
            properties.put("mail.smtp.auth", "true");
            MailSSLSocketFactory sslSocketFactory = new MailSSLSocketFactory();
            sslSocketFactory.setTrustAllHosts(true);
            properties.put("mail.smtp.ssl.enable", "true");
            properties.put("mail.smtp.ssl.socketFactory", sslSocketFactory);
            //獲取session
            Session session = Session.getDefaultInstance(properties,new Authenticator(){
                public PasswordAuthentication getPasswordAuthentication() {
                    //發(fā)件人賬號密碼
                    return new PasswordAuthentication(parameter.getFromMailbox(), parameter.getFromMailboxPWD());
                }
            });
            //附件所在的目錄路徑
            File fileUrl = new File(parameter.getEnclosurePath());
            //獲取目錄下的所有文件(可以在.listFiles()方法中使用匿名內(nèi)部類重寫accept()方法針對文件名對文件進行過濾)
            File fileList [] = fileUrl.listFiles();
            //已發(fā)送郵件數(shù)
            int currentNum = 1;
            if(StringUtils.isEmpty(fileList)){
                return "文件夾"+parameter.getEnclosurePath()+"內(nèi)容為空";
            }
            for(File file : fileList){
                //待發(fā)送郵件數(shù)
                int surplusNum = fileList.length-currentNum;
                //創(chuàng)建郵件
                MimeMessage message = new MimeMessage(session);
                message.setFrom(new InternetAddress(parameter.getFromMailbox()));
                message.addRecipient(Message.RecipientType.TO, new InternetAddress(parameter.getToMailbox()));
                //郵件名命名
                message.setSubject(file.getName());
                //郵件文本
                BodyPart messageBodyPart = new MimeBodyPart();
                String text=String.format("本次共將發(fā)送郵件%s封-已發(fā)送%s封-待發(fā)送%s封", fileList.length,currentNum,surplusNum);
                messageBodyPart.setText(text);
                //郵件內(nèi)容
                Multipart multipart = new MimeMultipart();
                //將郵件文本放進郵件內(nèi)容中
                multipart.addBodyPart(messageBodyPart);
                //郵件附件
                messageBodyPart = new MimeBodyPart();
                DataSource source = new FileDataSource(file);
                messageBodyPart.setDataHandler(new DataHandler(source));
                //附件名命名
                messageBodyPart.setFileName(MimeUtility.encodeText(file.getName()));
                //將附件放進郵件內(nèi)容中
                multipart.addBodyPart(messageBodyPart);
                //將郵件內(nèi)容放進郵件中
                message.setContent(multipart);
                //發(fā)送
                Transport.send(message);
                //發(fā)送成功后將作為附件的本地文件名添加上成功標識,防止發(fā)送郵件中程序意外終止后無法區(qū)分已發(fā)送和未發(fā)送(用時間戳區(qū)分批次順序用currentNum區(qū)分在本批次中的順序)
                File newFileName = new File(file.getParent() + File.separator + String.format("%s_%s_%s",parameter.getSuccessTag(),currentNum,file.getName()));
                file.renameTo(newFileName);
                currentNum++;
                System.out.println(text+"|已發(fā)送文件:"+file.getName());
                //增加時間散列防止被第三方郵箱系統(tǒng)檢測為垃圾郵箱
                Thread.sleep(parameter.getSleepTime());
            }
        }catch (Exception e) {
            e.printStackTrace();
        }
        return "發(fā)送成功";
    }
 
    //郵箱驗證
    public boolean isMailbox(String mailbox){
        String check = "^([a-z0-9A-Z]+[-|\\.]?)+[a-z0-9A-Z]@([a-z0-9A-Z]+(-[a-z0-9A-Z]+)?\\.)+[a-zA-Z]{2,}$";
        Pattern regex = Pattern.compile(check);
        Matcher matcher = regex.matcher(mailbox);
        boolean result = matcher.matches();
        return result;
    }
}

 方法中調(diào)用,詳情如下:

package Email;
 
public class Email {
    public static void main(String[] args) throws Exception {
        EmailParameter emailParameter = new EmailParameter();
        emailParameter.setFromMailbox("******@163.com");
        emailParameter.setFromMailboxPWD("******");
        emailParameter.setToMailbox("******@qq.com");
        emailParameter.setEnclosurePath("C:\\Users\\ly\\Desktop\\email");
        emailParameter.setHost("smtp.163.com");
        emailParameter.setSleepTime(5000);
        emailParameter.setSuccessTag("ss");
        System.out.println(new EmailsServiceImpl().sendEmails(emailParameter));
    }
}

總結(jié)

到此這篇關(guān)于Java實現(xiàn)批量發(fā)送帶附件的郵件代碼的文章就介紹到這了,更多相關(guān)Java發(fā)送帶附件的郵件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java中.divide()方法使用及注意事項詳解

    Java中.divide()方法使用及注意事項詳解

    divide方法就是bigdecimal類中的一個除法計算方法,由于該divide方法參數(shù)類型眾多并且不易理解容易出現(xiàn)錯誤,這篇文章主要給大家介紹了關(guān)于Java中.divide()方法使用及注意事項的相關(guān)資料,需要的朋友可以參考下
    2024-03-03
  • java實現(xiàn)動態(tài)圖片效果

    java實現(xiàn)動態(tài)圖片效果

    這篇文章主要為大家詳細介紹了java實現(xiàn)動態(tài)圖片效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Java因項目配置不當而引發(fā)的數(shù)據(jù)泄露

    Java因項目配置不當而引發(fā)的數(shù)據(jù)泄露

    這篇文章主要介紹了Java因項目配置不當而引發(fā)的數(shù)據(jù)泄露解決辦法,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-09-09
  • Java try()語句實現(xiàn)try-with-resources異常管理機制操作

    Java try()語句實現(xiàn)try-with-resources異常管理機制操作

    這篇文章主要介紹了Java try()語句實現(xiàn)try-with-resources異常管理機制操作,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java實現(xiàn)把兩個有序數(shù)組合并到一個數(shù)組的實例

    java實現(xiàn)把兩個有序數(shù)組合并到一個數(shù)組的實例

    今天小編就為大家分享一篇java實現(xiàn)把兩個有序數(shù)組合并到一個數(shù)組的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-05-05
  • Java網(wǎng)絡(luò)編程之UDP協(xié)議詳細解讀

    Java網(wǎng)絡(luò)編程之UDP協(xié)議詳細解讀

    這篇文章主要介紹了Java網(wǎng)絡(luò)編程之UDP協(xié)議詳細解讀,UDP協(xié)議全稱是用戶數(shù)據(jù)報協(xié)議,在網(wǎng)絡(luò)中它與TCP協(xié)議一樣用于處理數(shù)據(jù)包,是一種無連接的協(xié)議,在OSI模型中,在第四層——傳輸層,處于IP協(xié)議的上一層,需要的朋友可以參考下
    2023-12-12
  • 詳解Mybatis框架SQL防注入指南

    詳解Mybatis框架SQL防注入指南

    這篇文章主要介紹了詳解Mybatis框架SQL防注入指南,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-07-07
  • springboot發(fā)送request請求的方式小結(jié)

    springboot發(fā)送request請求的方式小結(jié)

    在Java中,發(fā)送HTTP請求是常見需求,hutool工具包和RestTemplate類是實現(xiàn)此功能的兩種主流方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2024-09-09
  • SpringMVC的組件之HandlerExceptionResolver詳解

    SpringMVC的組件之HandlerExceptionResolver詳解

    這篇文章主要介紹了SpringMVC的組件之HandlerExceptionResolver詳解,不管是在處理請求映射(HandlerMapping),還是在請求被處理(Handler)時拋出的異常,DispatcherServlet都會委托給HandlerExceptionResolver進行異常處理,該接口只有一個方法,需要的朋友可以參考下
    2023-10-10
  • Java?設(shè)計模式以虹貓藍兔的故事講解單例模式

    Java?設(shè)計模式以虹貓藍兔的故事講解單例模式

    單例模式(Singleton?Pattern)是?Java?中最簡單的設(shè)計模式之一。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式
    2022-03-03

最新評論