精华内容
下载资源
问答
  • 发送“Java邮件发送附件名变.dat问题.xlsx”, 收到的却是“ATT_000781.dat”。 如图: 原因: 参数mail.mime.splitlongparameters 在linux下 会默认为 true,附件名在发送时会被base64加密,如果加密后的数据长度...

    问题:

    发送带中文邮件名时收到的文件与发送的文件不同
    例如:
    发送“Java邮件发送附件名变.dat问题.xlsx”,
    收到的却是“ATT_000781.dat”。
    如图:
    在这里插入图片描述

    原因:

    参数mail.mime.splitlongparameters 在linux下 会默认为 true,附件名在发送时会被base64加密,如果加密后的数据长度超过60,就会被截断。

    解决方法:

    在发送邮件的代码之前添加

    System.setProperty("mail.mime.splitlongparameters","false");
    
    展开全文
  • 第三:邮件附件问题。我下面的demo都会介绍这些问题及解决。实现方案准备工作我们先要准备一个可以发送的邮箱,我这里以我的163邮箱为例,现在发送邮件的规则,要求你输入一种叫做授权码的东西,注...

    背景

    有个小伙伴问我你以前发邮件功能怎么弄的。然后我就给他找了个demo,正好在此也写一下,分享给大家。

    理清痛点

    发送邮件,大家可以想一下,坑的地方在哪?
    我觉得是三个吧。
    第一:邮件白名单问题。
    第二:邮件超时问题。
    第三:邮件带附件问题。
    我下面的demo都会介绍这些问题及解决。

    实现方案

    准备工作

    我们先要准备一个可以发送的邮箱,我这里以我的163邮箱为例,现在发送邮件的规则,要求你输入一种叫做授权码的东西,注意这个东西不是密码。
    获取授权码的步骤:

    8a68f8ba0051fd8fe3d9373348d63a5c.png

    31428a6b36dc69ad0dba32a235fabdbd.png

    8bb2fd5c0123071f17ba4b4e47950574.png


    当选择开启,通过验证之后就可以获取到验证码。选择重置验证码也可以获取。以前17年的时候就写过一个demo,现在19年又开了一个,因为以前的忘了。

    SpringBoot项目引入邮件包

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-mail</artifactId>
    </dependency>

    yml配置邮件相关

    spring:
      mail:
        # 邮件服务地址
        host: smtp.163.com
        # 端口,可不写默认
        port: 25
        # 编码格式
        default-encoding: utf-8
        # 用户名
        username: xxx@163.com
        # 授权码,就是我们刚才准备工作获取的代码
        password: xxx
        # 其它参数
        properties:
          mail:
            smtp:
              # 如果是用 SSL 方式,需要配置如下属性,使用qq邮箱的话需要开启
              ssl:
                enable: true
                required: true
              # 邮件接收时间的限制,单位毫秒
              timeout: 10000
              # 连接时间的限制,单位毫秒
              connectiontimeout: 10000
              # 邮件发送时间的限制,单位毫秒
              writetimeout: 10000

    针对于上面提的超时问题,捕获超时异常就可解决。

    邮件发送工具类

    主要通过以下工具类就可以满足发送java邮件的需要。当我们进行好 yml 配置后,SpringBoot会帮助我们自动配置 JavaMailSender 我们通过这个java类就可以实现操作java来发送邮件。以下列举了几种常用的邮件。

    @Service
    public class MailService {
        private static final Logger logger = LoggerFactory.getLogger(MailServiceImpl.class);
    
        @Autowired
        private JavaMailSender mailSender;
    
        private static final String SENDER = "xxx@163.com";
    
        /**
         * 发送普通邮件
         *
         * @param to      收件人
         * @param subject 主题
         * @param content 内容
         */
        @Override
        public void sendSimpleMailMessge(String to, String subject, String content) {
            SimpleMailMessage message = new SimpleMailMessage();
            message.setFrom(SENDER);
            message.setTo(to);
            message.setSubject(subject);
            message.setText(content);
            try {
                mailSender.send(message);
            } catch (Exception e) {
                logger.error("发送简单邮件时发生异常!", e);
            }
        }
    
        /**
         * 发送 HTML 邮件
         *
         * @param to      收件人
         * @param subject 主题
         * @param content 内容
         */
        @Override
        public void sendMimeMessge(String to, String subject, String content) {
            MimeMessage message = mailSender.createMimeMessage();
            try {
                //true表示需要创建一个multipart message
                MimeMessageHelper helper = new MimeMessageHelper(message, true);
                helper.setFrom(SENDER);
                helper.setTo(to);
                helper.setSubject(subject);
                helper.setText(content, true);
                mailSender.send(message);
            } catch (MessagingException e) {
                logger.error("发送MimeMessge时发生异常!", e);
            }
        }
    
        /**
         * 发送带附件的邮件
         *
         * @param to       收件人
         * @param subject  主题
         * @param content  内容
         * @param filePath 附件路径
         */
        @Override
        public void sendMimeMessge(String to, String subject, String content, String filePath) {
            MimeMessage message = mailSender.createMimeMessage();
            try {
                //true表示需要创建一个multipart message
                MimeMessageHelper helper = new MimeMessageHelper(message, true);
                helper.setFrom(SENDER);
                helper.setTo(to);
                helper.setSubject(subject);
                helper.setText(content, true);
    
                FileSystemResource file = new FileSystemResource(new File(filePath));
                String fileName = file.getFilename();
                helper.addAttachment(fileName, file);
    
                mailSender.send(message);
            } catch (MessagingException e) {
                logger.error("发送带附件的MimeMessge时发生异常!", e);
            }
        }
    
        /**
         * 发送带静态文件的邮件
         *
         * @param to       收件人
         * @param subject  主题
         * @param content  内容
         * @param rscIdMap 需要替换的静态文件
         */
        @Override
        public void sendMimeMessge(String to, String subject, String content, Map<String, String> rscIdMap) {
            MimeMessage message = mailSender.createMimeMessage();
            try {
                //true表示需要创建一个multipart message
                MimeMessageHelper helper = new MimeMessageHelper(message, true);
                helper.setFrom(SENDER);
                helper.setTo(to);
                helper.setSubject(subject);
                helper.setText(content, true);
    
                for (Map.Entry<String, String> entry : rscIdMap.entrySet()) {
                    FileSystemResource file = new FileSystemResource(new File(entry.getValue()));
                    helper.addInline(entry.getKey(), file);
                }
                mailSender.send(message);
            } catch (MessagingException e) {
                logger.error("发送带静态文件的MimeMessge时发生异常!", e);
            }
        }
    }

    发送邮件的demo

    @RunWith(SpringRunner.class)
    @SpringBootTest
    public class SpringbooEmailDemoApplicationTests {
    
        @Autowired
        private MailService mailService;
    
        private static final String TO = "xxx@qq.com";
        private static final String SUBJECT = "测试邮件";
        private static final String CONTENT = "test content";
    
        /**
         * 测试发送普通邮件
         */
        @Test
        public void sendSimpleMailMessage() {
            mailService.sendSimpleMailMessge(TO, SUBJECT, CONTENT);
        }
    
        /**
         * 测试发送html邮件
         */
        @Test
        public void sendHtmlMessage() {
            String htmlStr = "<h1>Test</h1>";
            mailService.sendMimeMessge(TO, SUBJECT, htmlStr);
        }
    
        /**
         * 测试发送带附件的邮件
         * @throws FileNotFoundException
         */
        @Test
        public void sendAttachmentMessage() throws FileNotFoundException {
            File file = ResourceUtils.getFile("classpath:test.txt");
            String filePath = file.getAbsolutePath();
            mailService.sendMimeMessge(TO, SUBJECT, CONTENT, filePath);
        }
    
        /**
         * 测试发送带附件的邮件
         * @throws FileNotFoundException
         */
        @Test
        public void sendPicMessage() throws FileNotFoundException {
            String htmlStr = "<html><body>测试:图片1 <br> <img src='cid:pic1'/> <br>图片2 <br> <img src='cid:pic2'/></body></html>";
            Map<String, String> rscIdMap = new HashMap<>(2);
            rscIdMap.put("pic1", ResourceUtils.getFile("classpath:pic01.jpg").getAbsolutePath());
            rscIdMap.put("pic2", ResourceUtils.getFile("classpath:pic02.jpg").getAbsolutePath());
            mailService.sendMimeMessge(TO, SUBJECT, htmlStr, rscIdMap);
        }
    }

    白名单问题

    如果是发送给固定邮箱,可以直接在固定邮箱里面设置白名单,如果频繁的发送给多个邮箱,最好设置以下发送时间间隔,不要不断的给某一个邮箱发送。

    总结

    至此SpringBoot发送邮件介绍完毕,大家可以直接使用代码来进行发送。

    http://weixin.qq.com/r/tkzSyt3EQ4A8rZmp9xmk (二维码自动识别)

    展开全文
  • 之前有给大家分享过一篇关于批量将word转成pdf的文件,然后将pdf文件批量按照指定收件人进行邮件发送的文章。文章可以参照:不同附件的邮件批量发给不同的指定人 批量发送带PDF附件的邮件 昨天一台湾的网友咨询了这...

    之前有给大家分享过一篇关于批量将word转成pdf的文件,然后将pdf文件批量按照指定收件人进行邮件发送的文章。文章可以参照:

    不同附件的邮件批量发给不同的指定人

    批量发送带PDF附件的邮件

    昨天一台湾的网友咨询了这个问题,同时他也给我分享了他在网上下载的另外一个版本,个人觉得很非常实用,这里给大家分享一下。文末会分享链接,大家可以下载保存,万一以后用得上呢。先来看看怎么用吧,因为中间确实有个设置需要说一下,不然只是拷贝代码的话,还是会出错。

    首先打开Excel文件,其中有两个工作表,第一个是发送的清单,里面的内容很简单,如下:

    b4cdf8b496707c6379be24614aa45f31.png

    工作表 - 发送清单

    另外一个工作表就是邮件的标题和正文:

    6b5864f4941e1d21ea56659c7201555c.png

    工作表 - 正文

    写好相应的文本后,点击发送邮件按钮后,自动弹出邮箱客户端Outlook,界面是这个样子的:

    d1b26776c3753dc1ce3e6c8d0e0a9278.png

    Outlook发送邮件预览界面

    回到Excel中,会返回一个对话框显示有多少封邮件要发送。(我这里只写了一个收件人,所以只显示了一封邮件)

    d93517987609f29e95c788f416d2491c.png

    Excel中弹出对话框

    来看看Excel中的代码吧。(不懂没关系,主要明白你拿去之后需要改哪些地方就可以了,非常容易。)

    6973acff790eae2211d816395da1fdcc.png

    Excel中的代码

    代码很人性化,基本每一行都有注释。看看哪些地方值得关注以及后期如果拷贝代码后需要修改的。

    代码中提到了这句:

    67b74ed12755b9406025061e124104f3.png

    代码中的设置

    它这个其实是已经设置好了,如果你要拷贝代码进行使用的话,完成复制粘贴之后,运行之前需要进行一个设置,否则代码无法运行,会报错。设置如图所示:

    点击工具下的引用:

    617af0dc607313f77d9c36d5364619fd.png

    工具 - 引用

    调出引用-VBAProject对话框,如下:

    9a7658162e356e1b385abf66fd816d2a.png

    引用对话框中的选项

    一定要勾选这个:Microsoft Outlook 16.0 Object Library

    这个根据你的outlook的版本来,之前那个朋友拷贝后无法运行,就是因为没有勾选此选项导致的。一定要看清楚,不要跟上面那个Microsoft Office 16.0 Object Library弄混了,各是各的。

    接下来代码中:

    6c962a0bae4111ca5d8e22297c3ef6a7.png

    代码中文字部分

    这个发送清单,其实就是工作表的名称,对应就是Excel中的工作表这个:

    723b9864d59d45eadf609225bb1ab356.png

    对应工作表

    再来就是这个“正文”:

    cbeae548865a3242f08f0c541d8b180f.png

    代码中文字部分

    对应的是Excel工作表中的这个:

    c14b5fc220e264a9ab8cc6d6e9dd7caa.png

    对应工作表

    如果你的工作表名称与代码中的不一致,需要进行更改。

    其他的类似于Cells(1,2),意思就是单元格第1行第2列。

    我将后面的代码中进行了一下修改,因为如果不修改的话,邮件会直接发出去,而不是先预览一下。如果你的邮件相当多,最好先预览测试一下。没问题的话,再改回去就可以了。这个地方:

    e331233ca0025638380bfaa5019a53aa.png

    代码预览邮件

    display就是预览的意思,如果你无需预览直接发送,改成下面这样就可以了:

    edbaf1337f23eb6c1522b283bca1fb03.png

    代码 - 发送邮件

    希望这个工具对大家有用,再次感谢来自宝岛台湾网友Kve的分享。

    文中提到的链接如下:

    链接:https://pan.baidu.com/s/173i3jpJGPy-rvqg3RydM4g
    提取码:wasg


    如果本文对你有帮助,请分享给有需要的朋友或你的朋友圈,让大家一起高效工作。

    展开全文
  • java 邮件发送 可带附件 java 邮件发送 可带附件 java 邮件发送 可带附件
  • package ...import java.io.File;import java.util.ArrayList;import java.util.Date;import java.util.List;import java.util.Properties;import javax.activation.DataHandler;import javax.act...

    package com.sungrow.sendmail;

    import java.io.File;

    import java.util.ArrayList;

    import java.util.Date;

    import java.util.List;

    import java.util.Properties;

    import javax.activation.DataHandler;

    import javax.activation.DataSource;

    import javax.activation.FileDataSource;

    import javax.mail.Authenticator;

    import javax.mail.BodyPart;

    import javax.mail.Message.RecipientType;

    import javax.mail.PasswordAuthentication;

    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;

    import javax.mail.internet.MimeUtility;

    import org.slf4j.Logger;

    import org.slf4j.LoggerFactory;

    import com.sungrow.commons.ConfigDataService;

    import com.sungrow.dao.entity.ReportMail;

    import com.sungrow.exception.InsightDBException;

    public class SendMail {

    /**

    * 发件箱 do_not_reply@fmclubs.com

    */

    private static String FROM = null;

    /**

    * 发件箱密码fmc123

    */

    private static  String PASSWORD = null;

    private static Logger _log = LoggerFactory.getLogger("Task");

    /***

    * 发送邮件带附件(发给多人)

    *

    * @param url

    *            附件路劲

    * @param title

    *            邮箱标题

    * @param content

    *            邮件内容

    * @param email 接受者邮件

    */

    public static boolean sendEmailAppendixList()throws InsightDBException {

    Session session =getSession();

    MimeMessage message = new MimeMessage(session);

    String str="email1,email2,email3";//多分接受邮件者

    try {

    @SuppressWarnings("static-access")

    InternetAddress[] iaToListcs = new InternetAddress().parse(str);

    MimeMultipart mm = new MimeMultipart();

    message.setSubject("邮件标题");

    message.setSentDate(new Date());

    message.setFrom(new InternetAddress(FROM));

    //message.setRecipient(RecipientType.TO, new InternetAddress(email));

    message.setRecipients(RecipientType.CC,iaToListcs);//发送给多人

    // 设置邮件内容

    BodyPart body =null;

    DataSource ds=null;

    List url=new ArrayList();//多分附件的路劲

    url.add("附件路劲");

    for(int i=0;i

    BodyPart contentPart = new MimeBodyPart();

    contentPart.setText("邮件内容");

    mm.addBodyPart(contentPart);

    // 设置邮件附件

    body = new MimeBodyPart();

    ds= new FileDataSource(new File(url.get(i)));

    DataHandler dh = new DataHandler(ds);

    body.setDataHandler(dh);

    body.setFileName(MimeUtility.encodeText(ds.getName(),"utf-8",null));

    mm.addBodyPart(body);

    }

    message.setContent(mm);

    // 发邮件

    Transport.send(message);

    } catch (Exception e) {

    e.printStackTrace();

    _log.error(e.getMessage());

    _log.error("发送邮件失败======》sendEmailAppendixList");

    return false;

    }

    return true;

    }

    /***

    * 获得session

    *

    * @return

    */

    public static Session getSession() {

    ConfigDataService sd=ConfigDataService.getInstance();

    //map=DaoFactory.getReportDaoInstance().selectEmail();

    FROM=sd.getMail_addr();//发送者邮箱

    PASSWORD=sd.getMail_psd();//发送者邮箱密码

    Properties props = new Properties();

    props.setProperty("mail.transport.protocol",sd.getMail_protocol());

    props.put("mail.smtp.localhost", "localHostAdress");

    props.setProperty("mail.smtp.host",sd.getMail_host());

    props.setProperty("mail.smtp.port",sd.getMail_port());

    props.setProperty("mail.smtp.auth", "true");

    Session session = Session.getInstance(props, new Authenticator() {

    @Override

    protected PasswordAuthentication getPasswordAuthentication() {

    return new PasswordAuthentication(FROM, PASSWORD);

    }

    });

    return session;

    }

    }

    展开全文
  • import java.util.Date;import java.util.Properties;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.Address;import javax.mail.Authenticator;impo...
  • java邮件图文附件发送

    2017-10-19 14:15:51
    java代码,邮件发送案例,可以添加图文、可以添加附件
  • import java.io.File;import java.util.Date;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.Address;import javax.mail.BodyPart;import javax.mail.Message;impo...
  • 1 importjava.io.File;2 importjava.util.Date;34 importjavax.activation.DataHandler;5 importjavax.activation.FileDataSource;6 importjavax.mail.Address;7 importjavax.mail.BodyPart;8 importjavax.mail.Mess...
  • [java]代码库import java.io.File;import java.util.Date;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.Address;import javax.mail.BodyPart;import javax.mail....
  • JAVA邮件发送工具类(支持同步和异步发送邮件以及附件信息),支持多个抄送邮件发送。
  • java 邮件发送,支持附件发送, 同时可以发送给多人
  • import java.io.File;import java.util.Date;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.Address;import javax.mail.BodyPart;import javax.mail.Message;impo...
  • java发送邮件 java使用 commons-email 发送邮件 发送模板邮件,附件邮件 一、Commons Email 简介 ...它构建在Java邮件API之上,其目的是简化。 2、官网: http://commons.apache.org/proper/commons-email...
  • import java.io.File;import java.util.Date;import javax.activation.DataHandler;import javax.activation.FileDataSource;import javax.mail.Address;import javax.mail.BodyPart;import javax.mail.Message;impo...
  • java邮件
  • 查了很多资料都是使用本地资源作为附件发送。但是数据和程序分开时,还需要先下载数据,保存到本地再发送邮件。查了很多资料后,发现apach提供了很好的一个commons-mail.jar包,做了很好的封装,简单易用。下载地址...
  • java Mail 发送邮件邮件附件 java Mail 发送邮件邮件附件
  • Java 邮件发送附件

    2018-03-20 16:22:04
    我用的是微软azure发送的email.properties#如果是qq邮箱的话是 smtp.qq.com host=smtp.sendgrid.net #qq邮箱是 465 port=587 userName=azure帐号 #qq邮箱的话是授权码,而不是邮箱密码 password=密码 from=azure帐号...
  • 第一节 利用VBA发送附件电子邮件这个专题的第一节是利用VBA发送附件电子邮件,用电子邮件发送一个附件,在我们日常工作中是随处可见的,也是我们大多数日常工作处理事务之一,如果你处在一个管理部门,下发一些通知...
  • 本文实例为大家分享了Java实现邮件发送功能的具体代码,供大家参考,具体内容如下1、需要导入mail.jar、activation.jar这两个邮件发送的jar包,可在网上搜索并下载2、需要设置相关邮箱服务器,我用的是QQ邮箱,操作...
  • 本文实例为大家分享了Java实现邮件发送功能的具体代码,供大家参考,具体内容如下1、需要导入mail.jar、activation.jar这两个邮件发送的jar包,可在网上搜索并下载2、需要设置相关邮箱服务器,我用的是QQ邮箱,操作...
  • 简单附件发送见我另一博客:实现带附件邮件发送其实很简单,Java Mail提供了一个MimeMultipart,用户可以往MimeMultipart加入不同的内容,如文字部分和附件部分等,多个附件循环加入即可。更多内容可查看官方API:...
  • 实现java发送邮件的过程大体有以下几步:准备一个properties文件,该文件中存放SMTP服务器地址等参数。利用properties创建一个Session对象利用Session创建Message对象,然后设置邮件主题和正文利用Transport对象发送...
  • 本文实例为大家分享了Java实现邮件发送功能的具体代码,供大家参考,具体内容如下1、需要导入mail.jar、activation.jar这两个邮件发送的jar包,可在网上搜索并下载2、需要设置相关邮箱服务器,我用的是QQ邮箱,操作...
  • package ...import java.io.File;import java.io.IOException;import java.util.Date;import java.util.List;import java.util.Properties;import javax.mail.Address;import javax.mail....
  • 基于JavaMail的Java邮件发送Author xiuhong.chen@hand-china.comDesc 简单邮件发送Date 2017/12/8项目中需要根据物料资质的状况实时给用户发送邮件,然后我就简单学习了SMTP.电子邮件的在网络中传输和网页一样需要...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,725
精华内容 690
关键字:

java邮件发送附件

java 订阅