精华内容
下载资源
问答
  • javax.mail-1.5.4.jar

    热门讨论 2016-01-06 10:02:40
    javax.mail-1.5.4.jar
  • javamail最新jar包1.5.5和1.4.5两个版本
  • javax.mail-1.4.4.jar

    热门讨论 2013-02-27 16:58:18
    通过java扩展包javax.mail-1.4.4.jar实现邮件发送功能。 import javax.mail.Address; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart...
  • 以前我们使用JavaMail发送邮件...所以这里主要谈谈SpringMail发送。 一、相关配置 1.导入jar包 如果是Maven项目,Maven地址如下: <dependency> <groupId>org.springframework</groupId> ...

    以前我们使用JavaMail发送邮件,步骤挺多的。现在的项目跟Spring整合的比较多。所以这里主要谈谈SpringMail发送。

    一、相关配置

    1.导入jar包

    如果是Maven项目,Maven地址如下:

        <dependency>
             <groupId>org.springframework</groupId>
             <artifactId>spring-context-support</artifactId>
             <version>4.2.6.RELEASE</version>
        </dependency>
        <dependency>
             <groupId>javax.mail</groupId>
             <artifactId>mail</artifactId>
             <version>1.4.5</version>
       </dependency>

    2.配置applicationContext-email.xml(以QQ邮箱发送邮件为例)

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
        xmlns:tx="http://www.springframework.org/schema/tx"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
                    http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
                    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
     
        <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
            <!-- 基于校验规则的邮件发送方式 -->
            <!-- SMTP协议介绍 -->
            <property name="host" value="smtp.qq.com" />
            <property name="username" value="@qq.com" />
            <property name="password" value="" />//
            <property name="javaMailProperties">
                <props>
                    <!-- 必须进行授权认证,它的目的就是阻止他人任意乱发邮件 -->
                    <prop key="mail.smtp.auth">true</prop>
                    <!-- SMTP加密方式:连接到一个TLS保护连接 -->
                    <prop key="mail.smtp.starttls.enable">true</prop>
                    <!-- 设置邮件发送超时时间 -->
                    <prop key="mail.smtp.timeout">25000</prop>
                </props>
            </property>
        </bean>
     
    </beans>

    二、问题总结

    1.主机的配置

    个人邮箱使用的主机是:

     <property name="host" value="smtp.qq.com"/>

    企业邮箱使用的主机是:

    <property name="host" value="smtp.exmail.qq.com"/>

    2.qq邮箱的授权码

    关于qq邮箱的授权码,如果是企业邮箱,则使用登录密码,否则要去获取授权码,要不然会报异常
    Exception in thread "main" org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException

    当然,我们可以使用163邮箱发送,步骤也是一样(主机host的配置为smtp.163.com),要去申请授权码,只是有点奇怪的是,163发送会被当成垃圾邮箱处理。所以这里建议不要使用163邮箱发送邮件。

    三、错误总结

    1.javax.mail.MessagingException: Could not connect to SMTP host: smtp.qq.com, port: 25;

    qq邮箱使用的是smtp协议,首先需求检查发件人的邮箱的POP3/SMTP服务是否开启,若未开启,需要到设置—账户中开启:

    一般发送邮件的服务器端口号为25,关于SSL协议以及端口号可以参考下面的一篇博客:

    https://blog.csdn.net/a2279860a/article/details/59012885

    若要修改默认端口号,可进行如下配置:

    若使用的是Java代码进行的配置,可进行如下修改:

    transport.connect("smtp.qq.com",465, username, password);

    2.javax.mail.MessagingException: 503 Error: need EHLO and AUTH first !

    503错误。因为smtp服务器需要授权。在spring的配置中加入<prop key="mail.smtp.auth">true</prop>即可。

    或者:

    JavaMailSenderImpl sender = new JavaMailSenderImpl();
    Properties javaMailProp = new Properties();
    javaMailProp.setProperty("mail.smtp.auth", "true");
    sender.setJavaMailProperties(javaMailProp);

    3.Failed messages: javax.mail.MessagingException: Exception reading response/Connection timed out

    异常读取响应/连接超时

    解决办法:配置timeout

    或者:

    4.org.springframework.mail.MailAuthenticationException: Authentication failed

    授权失败,可能原因:

    1.qq邮箱

    上述POP3/SMTP服务未开启,若已开启,还需要将上述授权码复制粘贴到smtp.mail.username处,如:

    2.163邮箱

    出现这个问题的原因可能是,所配的发送邮箱,有没有对外开放POP3/SMTP服务

    解决的方法:(此处使用到是163邮箱,以下是163邮箱 手动设置开启POP3/SMTP服务,其他邮箱需要自行百度)

    5.Could not connect to SMTP host: smtp.***.com, port: 465, response: -1

    原因:465端口是为SMTPS(SMTP-over-SSL)协议服务开放的,这是SMTP协议基于SSL安全协议之上的一种变种协议。

    解决方法:

    修改配置文件

    或加上如下代码:

    props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

     

    四、扩展-邮件服务端口

    25端口(SMTP):25端口为SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)服务所开放的,是用于发送邮件。

    如今绝大多数邮件服务器都使用该协议。当你给别人发送邮件时,你的机器的某个动态端口(大于1024)就会与邮件服务器的25号端口建立一个连接,你发送的邮件就会通过这个连接传送到邮件服务器上,保存起来。

    109端口(POP2):109端口是为POP2(Post Office Protocol Version 2,邮局协议2)服务开放的,是用于接收邮件的。

    110端口(POP3):110端口是为POP3(Post Office Protocol Version 3,邮局协议3)服务开放的,是用于接收邮件的。

    143端口(IMAP):143端口是为IMAP(INTERNET MESSAGE ACCESS PROTOCOL)服务开放的,是用于接收邮件的。
     

    目前POP3使用的比POP2广得多,POP2几乎被淘汰,也有某些服务器同时支持POP2和POP3协议。客户端可以使用POP3协议来访问服务端的邮件服务,如今ISP的绝大多数邮件服务器都是使用POP3协议(极少用POP2协议)。在使用邮件客户端程序的时候,会要求输入POP3服务器地址,默认情况下使用的就是110端口。当你用邮件客户端(比如、Thunderbird、foxmail、MS Outlook Express以及各类邮件精灵)登录时,你的机器就会自动用机器的某一个动态端口(大于1024)连接邮件服务器的110端口,服务器就把别人给你发的邮件(之前保存在邮件服务器上),发送到你机器,这样你就可以看到你客户端工具上的收件箱里的新邮件了。
    
    IMAP协议,和POP3协议一样是用来接收邮件的,但是它有它的特别和新颖之处,它是面向用户的,它和POP3协议的主要区别是:用户可以不用把所有的邮件内容全部下载,而是只下载邮件标题和发件人等基本信息,用户可以由标题等基本信息,去决定是否下载邮件全文,用户可以通过客户端的浏览器直接对服务器上的邮件进行操作(比如:打开阅读全文、丢进垃圾箱、永久删除、整理到某文件夹下、归档、)。再简单来说就是:浏览器用的IMAP协议(143端口)来为你接收邮件以及让你很方便的操作服务器上的邮件。邮件客户端用的POP3协议(110端口)来为你接收邮件的全部信息和全文内容保存到你的本地机器成为一个副本,你对邮件客户端上的副本邮件的任何操作都是在副本上,不干涉邮件服务器上为你保存的邮件原本。
    
    上面介绍的SMTP协议、POP2协议、POP3协议、IMAP协议都是不安全的协议。因考虑到网络安全的因素,下面给你介绍基于SSL(Secure Sockets Layer 安全套接层)协议的安全的邮件收发协议。你的邮件在传输过程中可能被网络黑客截取邮件内容,如果你的邮件机密性非常强,不想被收件人以外的任何人和任何黑客截取,或者是涉及国家机密安全的,等等。那么你的邮件就不该使用上述的三种协议进行收发。

    若你采用SMTP协议发邮件,那么你发出的邮件从你的机器传到服务器的过程中,可能被黑客截取从而泄露。****若你采用POP2或者POP3协议收取邮件,那么你的邮件从服务器传至你当前机器的过程可能被黑客截取从而泄露。

    465端口(SMTPS):465端口是为SMTPS(SMTP-over-SSL)协议服务开放的,这是SMTP协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。SMTPS和SMTP协议一样,也是用来发送邮件的,只是更安全些,防止邮件被黑客截取泄露,还可实现邮件发送者抗抵赖功能。防止发送者发送之后删除已发邮件,拒不承认发送过这样一份邮件。

    995端口(POP3S):995端口是为POP3S(POP3-over-SSL)协议服务开放的,这是POP3协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。POP3S和POP3协议一样,也是用来接收邮件的,只是更安全些,防止邮件被黑客截取泄露,还可实现邮件接收方抗抵赖功能。防止收件者收件之后删除已收邮件,拒不承认收到过这样一封邮件。

    993端口(IMAPS):993端口是为IMAPS(IMAP-over-SSL)协议服务开放的,这是IMAP协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。IMAPS和IMAP协议一样,也是用来接收邮件的,只是更安全些,防止邮件被黑客截取泄露,还可实现邮件接收方抗抵赖功能。防止收件者收件之后删除已收邮件,拒不承认收到过这样一封邮件。
    以上即是我对Spring Mail以及Java Mail发送邮件的总结,若有错误和补充请及时提出,未完待续……

    展开全文
  • 诡异的 spring mail 发送邮件问题

    千次阅读 2019-07-04 15:29:06
    mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory 运行一段时间,竟然假死。 jstack pid 发现整个线程阻塞。仔细审查下代码配置,怀疑没有设置超时时间。网上demo千篇一律,...

    项目中有个消息系统,通过 RabbitMQ 发送系统中的邮件时,采用5个固定线程池去发送邮件。发现虽然有消费,但是日志中却没有任何输出相关的成功或失败或抛出异常的信息。

    伪代码如下,消费者主线程使用固定线程池发送

    			
    @Slf4j
    @Component
    public class EmailConsumer {
        private ExecutorService fixedThreadPool = Executors.newFixedThreadPool(5);
        @RabbitListener(queues = MessageMqConstant.SEA_EMAIL_QUEUE_NAME)
        @RabbitHandler
        public void process(String message) {
     
    		log.info("接收到发送邮件任务:{}", message);
    		fixedThreadPool.execute(new Runnable() {
                    @Override
                    public void run() {
                        try {
    					  //采用spring mail  JavaMailSenderImpl
                            sendMail(message);
                        } catch (Exception e) {
                          log.error(e.getMessage(), e);
                        }
                    }
                });
        }
    }

    配置如下

    mail.host=smtp.exmail.qq.com
    mail.port=465
    mail.properties.mail.smtp.auth=true
    mail.properties.mail.smtp.starttls.enable=true
    mail.properties.mail.smtp.stattls.required=true
    mail.properties.mail.debug=true
    mail.properties.mail.smtp.port=465
    mail.properties.mail.smtp.socketFactory.port=465
    mail.properties.mail.smtp.socketFactory.fallback=false
    mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory

    运行一段时间,竟然假死。

    jstack  pid 发现整个线程阻塞。仔细审查下代码配置,怀疑没有设置超时时间。网上demo千篇一律,很少有配置超时时间的。查了资料终于

    找到了相关资料。

    #连接时间限制,单位毫秒。是关于与邮件服务器建立连接的时间长短的。默认是无限制
    mail.smtp.connectiontimeout
    #邮件接收时间限制,单位毫秒。这个是有关邮件接收时间长短。默认是无限制
    mail.smtp.timeout	
    #邮件发送时间限制,单位毫秒。有关发送邮件时内容上传的时间长短。默认同样是无限制
    mail.smtp.writetimeout

    终上所述,总结耗时or网络不可控,尽量都要设置超时时间。修改代码,增加超时时间,超时进行重发,控制失败次数即可。

    附上较完整的邮件参数设置

    【SMTP - 简单邮件传输协议】

    Name类型描述
    mail.smtp.userSMTP的默认用户名。
    mail.smtp.host要连接的SMTP服务器。
    mail.smtp.portINT要连接的SMTP服务器端口,如果connect()方法未明确指定一个。默认为25。
    mail.smtp.connectiontimeoutINT套接字连接超时值,以毫秒为单位。默认为无限超时。
    mail.smtp.timeoutINT套接字I / O超时值,以毫秒为单位。默认为无限超时。
    mail.smtp.from用于SMTP MAIL命令的电子邮件地址。这将设置信封返回地址。默认为msg.getFrom()或InternetAddress.getLocalAddress()。
    mail.smtp.localhostSMTP HELO或EHLO命令中使用的本地主机名。默认为InetAddress.getLocalHost()。getHostName()。如果您的JDK和名称服务配置正确,通常不需要设置。
    mail.smtp.localaddress创建SMTP套接字时要绑定的本地地址(主机名)。默认为Socket类选择的地址。通常不需要设置。
    mail.smtp.localportINT创建SMTP套接字时要绑定的本地端口号。默认为Socket类选择的端口号。
    mail.smtp.ehlo布尔如果为false,请勿尝试使用EHLO命令登录。默认为true。
    mail.smtp.auth布尔如果为true,则尝试使用AUTH命令对用户进行身份验证。默认为false。
    mail.smtp.auth.mechanisms如果设置,则列出要考虑的身份验证机制。仅使用服务器支持并由当前实现支持的机制。默认为“LOGIN PLAIN DIGEST-MD5 NTLM”,其中包括当前实现支持的所有身份验证机制。
    mail.smtp.auth.login.disable布尔如果为true,则阻止使用AUTH LOGIN命令。默认值为false。
    mail.smtp.auth.plain.disable布尔如果为true,则阻止使用AUTH PLAIN命令。默认值为false。
    mail.smtp.auth.digest-md5.disable布尔如果为true,则阻止使用AUTH DIGEST-MD5命令。默认值为false。
    mail.smtp.auth.ntlm.disable布尔如果为true,则阻止使用AUTH NTLM命令。默认值为false。
    mail.smtp.auth.ntlm.domainNTLM身份验证域。
    mail.smtp.auth.ntlm.flagsINTNTLM协议特定的标志。
    mail.smtp.submitter要在MAIL FROM命令中的AUTH标记中使用的提交者。通常由邮件中继使用来传递有关邮件的原始提交者的信息。
    mail.smtp.dsn.notifyRCPT命令的NOTIFY选项。永远不会,或成功,失败和延迟的某种组合(以逗号分隔)。
    mail.smtp.dsn.retMAIL命令的RET选项。FULL或HDRS。
    mail.smtp.sendpartial布尔如果设置为true,并且消息包含一些有效和一些无效地址,则无论如何都要发送消息,并使用SendFailedException报告部分失败。如果设置为false(默认值),则如果收件人地址无效,则不会将邮件发送给任何收件人。
    mail.smtp.sasl.enable布尔如果设置为true,请尝试使用javax.security.sasl包来选择登录的身份验证机制。默认为false。
    mail.smtp.sasl.mechanisms要尝试使用的空格或逗号分隔的SASL机制名称列表。
    mail.smtp.sasl.authorizationid要在SASL身份验证中使用的授权标识。如果未设置,则使用验证ID(用户名)。
    mail.smtp.sasl.realm与DIGEST-MD5身份验证一起使用的领域。
    mail.smtp.quitwait布尔如果设置为false,则发送QUIT命令并立即关闭连接。如果设置为true(默认值),则导致传输等待对QUIT命令的响应。
    mail.smtp.reportsuccess布尔如果设置为true,则导致传输为每个成功的地址包含SMTPAddressSucceededException。
    mail.smtp.socketFactory套接字工厂如果设置为实现javax.net.SocketFactory接口的类,则此类将用于创建SMTP套接字。
    mail.smtp.socketFactory.class如果设置,则指定实现javax.net.SocketFactory接口的类的名称。此类将用于创建SMTP套接字。
    mail.smtp.socketFactory.fallback布尔如果设置为true,则无法使用指定的套接字工厂类创建套接字将导致使用java.net.Socket类创建套接字。默认为true。
    mail.smtp.socketFactory.portINT指定使用指定套接字工厂时要连接的端口。如果未设置,将使用默认端口。
    mail.smtp.ssl.enable布尔如果设置为true,则默认情况下使用SSL连接并使用SSL端口。“smtp”协议默认为false,“smtps”协议默认为true。
    mail.smtp.ssl.checkserveridentity布尔如果设置为true,则检查RFC 2595指定的服务器标识。默认为false。
    mail.smtp.ssl.trust如果设置,并且尚未指定套接字工厂,则启用MailSSLSocketFactory。
    如果设置为“*”,则所有主机都是可信的。
    如果设置为以空格分隔的主机列表,则这些主机是受信任的。
    否则,信任取决于服务器提供的证书。
    mail.smtp.ssl.socketFactorySSL套接字工厂如果设置为扩展javax.net.ssl.SSLSocketFactory类的类,则此类将用于创建SMTP SSL套接字。
    mail.smtp.ssl.socketFactory.class如果设置,则指定扩展javax.net.ssl.SSLSocketFactory类的类的名称。此类将用于创建SMTP SSL套接字。
    mail.smtp.ssl.socketFactory.portINT指定使用指定套接字工厂时要连接的端口。如果未设置,将使用默认端口。
    mail.smtp.ssl.protocols指定将为SSL连接启用的SSL协议。属性值是javax.net.ssl.SSLSocket.setEnabledProtocols方法可接受的以空格分隔的标记列表。
    mail.smtp.starttls.enable布尔如果为true,则允许使用STARTTLS命令(如果服务器支持)在发出任何登录命令之前将连接切换到受TLS保护的连接。默认为false。
    mail.smtp.starttls.required布尔如果为true,则需要使用STARTTLS命令。如果服务器不支持STARTTLS命令,或者命令失败,则connect方法将失败。默认为false。
    mail.smtp.socks.host指定将用于连接到邮件服务器的SOCKS5代理服务器的主机名。
    mail.smtp.socks.port指定SOCKS5代理服务器的端口号。如果代理服务器未使用标准端口号1080,则只需使用此选项。
    mail.smtp.mailextension要附加到MAIL命令的扩展字符串。
    mail.smtp.userset布尔如果设置为true,则在isConnected方法中使用RSET命令而不是NOOP命令。在某些情况下,sendmail会在许多NOOP命令后缓慢响应; 使用RSET避免了这个sendmail问题。默认为false。

     

    【IMAP - 互联网信息访问协议】

    Name类型描述
    mail.imap.userIMAP的默认用户名。
    mail.imap.host要连接的IMAP服务器。
    mail.imap.portINT要连接的IMAP服务器端口,如果connect()方法没有显式指定一个。默认为143。
    mail.imap.partialfetch布尔控制是否应使用IMAP部分提取功能。默认为true。
    mail.imap.fetchsizeINT部分提取大小(以字节为单位)。默认为16K。
    mail.imap.ignorebodystructuresize布尔IMAP BODYSTRUCTURE响应包括每个身体部位的确切大小。通常,此大小用于确定每个身体部位要获取的数据量。默认为false。
    mail.imap.connectiontimeoutINT套接字连接超时值,以毫秒为单位。默认为无限超时。
    mail.imap.timeoutINT套接字I / O超时值,以毫秒为单位。默认为无限超时。
    mail.imap.statuscachetimeoutINTSTATUS命令响应缓存的超时值(以毫秒为单位)。默认值为1000(1秒)。零禁用缓存。
    mail.imap.appendbuffersizeINT附加到IMAP文件夹时要在内存中缓冲的消息的最大大小。
    mail.imap.connectionpoolsizeINT连接池中的最大可用连接数。默认值为1。
    mail.imap.connectionpooltimeoutINT连接池连接的超时值(以毫秒为单位)。默认值为45000(45秒)。
    mail.imap.separatestoreconnection布尔用于指示是否对存储命令使用专用存储连接的标志。默认值为false。
    mail.imap.auth.login.disable布尔如果为true,则禁止使用非标准AUTHENTICATE LOGIN命令,而是使用plain LOGIN命令。默认值为false。
    mail.imap.auth.plain.disable布尔如果为true,则阻止使用AUTHENTICATE PLAIN命令。默认值为false。
    mail.imap.auth.ntlm.disable布尔如果为true,则阻止使用AUTHENTICATE NTLM命令。默认值为false。
    mail.imap.proxyauth.user如果服务器支持PROXYAUTH扩展,则此属性指定要充当的用户的名称。使用管理员凭据对服务器进行身份验证。身份验证后,IMAP提供程序将发出PROXYAUTH命令,其中包含此属性中指定的用户名。
    mail.imap.localaddress创建IMAP套接字时要绑定的本地地址(主机名)。默认为Socket类选择的地址。
    mail.imap.localportINT创建IMAP套接字时要绑定的本地端口号。默认为Socket类选择的端口号。
    mail.imap.sasl.enable布尔如果设置为true,请尝试使用javax.security.sasl包来选择登录的身份验证机制。默认为false。
    mail.imap.sasl.mechanisms要尝试使用的空格或逗号分隔的SASL机制名称列表。
    mail.imap.sasl.authorizationid要在SASL身份验证中使用的授权标识。如果未设置,则使用验证ID(用户名)。
    mail.imap.sasl.realm用于需要领域的SASL身份验证机制的领域,例如DIGEST-MD5。
    mail.imap.auth.ntlm.domainNTLM身份验证域。
    mail.imap.auth.ntlm.flagsINTNTLM协议特定的标志。
    mail.imap.socketFactory套接字工厂如果设置为实现javax.net.SocketFactory接口的类,则此类将用于创建IMAP套接字。
    mail.imap.socketFactory.class如果设置,则指定实现javax.net.SocketFactory接口的类的名称。该类将用于创建IMAP套接字。
    mail.imap.socketFactory.fallback布尔如果设置为true,则无法使用指定的套接字工厂类创建套接字将导致使用java.net.Socket类创建套接字。默认为true。
    mail.imap.socketFactory.portINT指定使用指定套接字工厂时要连接的端口。未设置时使用默认端口。
    mail.imap.ssl.enable布尔如果设置为true,则默认情况下使用SSL连接并使用SSL端口。“imap”协议默认为false,“imaps”协议默认为true。
    mail.imap.ssl.checkserveridentity布尔如果设置为true,请检查RFC 2595指定的服务器标识。默认为false。
    mail.imap.ssl.trust如果设置,并且尚未指定套接字工厂,则启用MailSSLSocketFactory。 
    如果设置为“*”,则所有主机都是可信的。 
    如果设置为以空格分隔的主机列表,则这些主机是受信任的。
    否则,信任取决于服务器提供的证书。
    mail.imap.ssl.socketFactorySSL套接字工厂如果设置为扩展javax.net.ssl.SSLSocketFactory类的类,则此类将用于创建IMAP SSL套接字。
    mail.imap.ssl.socketFactory.class如果设置,则指定扩展javax.net.ssl.SSLSocketFactory类的类的名称。此类将用于创建IMAP SSL套接字。
    mail.imap.ssl.socketFactory.portINT指定使用指定套接字工厂时要连接的端口。如果未设置,将使用默认端口。
    mail.imap.ssl.protocols指定将为SSL连接启用的SSL协议。属性值是javax.net.ssl.SSLSocket.setEnabledProtocols方法可接受的以空格分隔的标记列表。
    mail.imap.starttls.enable布尔如果为true,则允许使用STARTTLS命令(如果服务器支持)在发出任何登录命令之前将连接切换到受TLS保护的连接。默认值为false。
    mail.imap.starttls.required布尔如果为true,则需要使用STARTTLS命令。如果服务器不支持STARTTLS命令,或者命令失败,则connect方法将失败。默认为false。
    mail.imap.socks.host指定将用于连接到邮件服务器的SOCKS5代理服务器的主机名。
    mail.imap.socks.port指定SOCKS5代理服务器的端口号。如果代理服务器未使用标准端口号1080,则只需使用此选项。
    mail.imap.minidletimeINT此属性设置延迟(以毫秒为单位)。如果未设置,则默认值为10毫秒。
    mail.imap.enableimapevents布尔启用特殊的IMAP特定事件以传递到Store的ConnectionListener。如果为true,则在Store的idle方法期间收到的未经请求的响应将作为ConnectionEvents发送,其类型为IMAPStore.RESPONSE。事件的消息将是原始IMAP响应字符串。默认情况下,不会发送这些事件。
    mail.imap.folder.classcom.sun.mail.imap.IMAPFolder的子类的类名。子类可用于为其他IMAP命令提供支持。子类必须具有public MyIMAPFolder(String fullName,char separator,IMAPStore store,Boolean isNamespace)和public MyIMAPFolder(ListInfo li,IMAPStore store)形式的公共构造函数

     

    【POP3 - 邮局协议】

    Name类型描述
    mail.pop3.userPOP3的默认用户名。
    mail.pop3.host要连接的POP3服务器。
    mail.pop3.portINT要连接的POP3服务器端口,如果connect()方法没有显式指定一个。默认为110。
    mail.pop3.connectiontimeoutINT套接字连接超时值,以毫秒为单位。默认为无限超时。
    mail.pop3.timeoutINT套接字I / O超时值,以毫秒为单位。默认为无限超时。
    mail.pop3.rsetbeforequit布尔在发送QUIT命令之前,在关闭文件夹时发送POP3 RSET命令。默认值为false。
    mail.pop3.message.classcom.sun.mail.pop3.POP3Message的子类的类名。子类可用于处理(例如)非标准Content-Type标头。子类必须具有MyPOP3Message(Folder f,int msgno)形式的公共构造函数抛出MessagingException。
    mail.pop3.localaddress创建POP3套接字时要绑定的本地地址(主机名)。默认为Socket类选择的地址。
    mail.pop3.localportINT创建POP3套接字时要绑定的本地端口号。默认为Socket类选择的端口号。
    mail.pop3.apop.enable布尔如果设置为true,如果POP3服务器支持APOP,则使用APOP而不是USER / PASS登录POP3服务器。APOP发送密码摘要而不是明文密码。默认为false。
    mail.pop3.socketFactory套接字工厂如果设置为实现javax.net.SocketFactory接口的类,则此类将用于创建POP3套接字。
    mail.pop3.socketFactory.class如果设置,则指定实现javax.net.SocketFactory接口的类的名称。该类将用于创建POP3套接字。
    mail.pop3.socketFactory.fallback布尔如果设置为true,则无法使用指定的套接字工厂类创建套接字将导致使用java.net.Socket类创建套接字。默认为true。
    mail.pop3.socketFactory.portINT指定使用指定套接字工厂时要连接的端口。如果未设置,将使用默认端口。
    mail.pop3.ssl.enable布尔如果设置为true,则默认情况下使用SSL连接并使用SSL端口。“pop3”协议默认为false,“pop3s”协议默认为true。
    mail.pop3.ssl.checkserveridentity布尔如果设置为true,请检查RFC 2595指定的服务器标识。默认为false。
    mail.pop3.ssl.trust如果设置,并且尚未指定套接字工厂,则启用MailSSLSocketFactory。 
    如果设置为“*”,则所有主机都是可信的。 
    如果设置为以空格分隔的主机列表,则这些主机是受信任的。 
    否则,信任取决于服务器提供的证书。
    mail.pop3.ssl.socketFactorySSL套接字工厂如果设置为扩展javax.net.ssl.SSLSocketFactory类的类,则此类将用于创建POP3 SSL套接字。
    mail.pop3.ssl.socketFactory.class如果设置,则指定扩展javax.net.ssl.SSLSocketFactory类的类的名称。此类将用于创建POP3 SSL套接字。
    mail.pop3.ssl.socketFactory.portINT指定使用指定套接字工厂时要连接的端口。如果未设置,将使用默认端口。
       
       
    mail.pop3.ssl.protocols指定将为SSL连接启用的SSL协议。属性值是javax.net.ssl.SSLSocket.setEnabledProtocols方法可接受的以空格分隔的标记列表。
    mail.pop3.starttls.enable布尔如果为true,则允许使用STLS命令(如果服务器支持)在发出任何登录命令之前将连接切换到受TLS保护的连接。默认为false。
    mail.pop3.starttls.required布尔如果为true,则需要使用STLS命令。如果服务器不支持STLS命令,或者命令失败,则connect方法将失败。默认为false。
    mail.pop3.socks.host指定将用于连接到邮件服务器的SOCKS5代理服务器的主机名。
    mail.pop3.socks.port指定SOCKS5代理服务器的端口号。
    mail.pop3.disabletop布尔如果设置为true,则不会使用POP3 TOP命令来获取邮件头。默认为false。
    mail.pop3.forgettopheaders布尔如果设置为true,则将忘记使用POP3 TOP命令检索的标头,并将其替换为作为POP3 RETR命令的一部分检索的标头。默认为false。
    mail.pop3.filecache.enable布尔如果设置为true,POP3提供程序将将消息数据缓存在临时文件中而不是内存中。消息仅在访问消息内容时添加到缓存中。消息头始终缓存在内存中(按需)。文件夹关闭或JVM终止时,将删除文件缓存。默认为false。
    mail.pop3.filecache.dir如果启用了文件高速缓存,则可以使用此属性覆盖JDK用于临时文件的缺省目录。
    mail.pop3.cachewriteto布尔控制writeTo方法在POP3消息对象上的行为。如果设置为true,并且消息内容尚未缓存,并且ignoreList为null,则在写入之前缓存该消息。否则,消息将直接流式传输到输出流而不进行高速缓存。默认为false。
    mail.pop3.keepmessagecontent布尔如果此属性设置为true,则将保留对缓存内容的硬引用,从而阻止在文件夹关闭或缓存内容显式无效之前重用内存(使用invalidate方法)。默认为false。

    参数设置来源:  https://www.cnblogs.com/15ho/p/5907174.html

    展开全文
  • javax.mail.jar JavaMail所需jar包

    千次下载 热门讨论 2014-04-04 12:41:50
    java发送邮件的jar包. JavaMail,顾名思义,提供给开发者处理电子邮件相关的编程接口。它是Sun发布的用来处理email的API。它可以方便地执行一些常用的邮件传输。我们可以基于JavaMail开发出类似于Microsoft Outlook...
  • 文章目录邮件常见异常:javax.mail.MessagingException: Could not connect to SMTP host1、异常触发2、Failed message 1: javax.mail.MessagingException: Could not connect to SMTP host: smtpdm.aliyun.com, ...
    展开全文
  • 使用javax.mail发送邮件详解

    千次阅读 2019-01-15 14:51:20
    import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; /** * @ClassName: Sendmail * @Description: 发送Email * @author: 孤傲苍狼 * @date: 2015-1-12 下午9:42:...

    一、RFC882文档简单说明

      RFC882文档规定了如何编写一封简单的邮件(纯文本邮件),一封简单的邮件包含邮件头和邮件体两个部分,邮件头和邮件体之间使用空行分隔。

      邮件头包含的内容有:

    1. from字段   --用于指明发件人
    2. to字段       --用于指明收件人
    3. subject字段  --用于说明邮件主题
    4. cc字段      -- 抄送,将邮件发送给收件人的同时抄送给另一个收件人,收件人可以看到邮件抄送给了谁
    5. bcc字段    -- 密送,将邮件发送给收件人的同时将邮件秘密发送给另一个收件人,收件人无法看到邮件密送给了谁

      邮件体指的就是邮件的具体内容。

    二、MIME协议简单介绍

      在我们的实际开发当中,一封邮件既可能包含图片,又可能包含有附件,在这样的情况下,RFC882文档规定的邮件格式就无法满足要求了。

      MIME协议是对RFC822文档的升级和补充,它描述了如何生产一封复杂的邮件。通常我们把MIME协议描述的邮件称之为MIME邮件MIME协议描述的数据称之为MIME消息。
      对于一封复杂邮件,如果包含了多个不同的数据,MIME协议规定了要使用分隔线对多段数据进行分隔,并使用Content-Type头字段对数据的类型、以及多个数据之间的关系进行描述。

    三、使用JavaMail创建邮件和发送邮件

      JavaMail创建的邮件是基于MIME协议的。因此可以使用JavaMail创建出包含图片,包含附件的复杂邮件。

    3.1、JavaMail API的简单介绍

      

      

      

    3.2、创建邮件发送测试项目

      

    3.3、发送一封只包含文本的简单邮件

     package me.gacl.main;                                                                                                                            
                                                                                                                                                      
     import java.util.Properties;                                                                                                                     
     import javax.mail.Message;                                                                                                                       
     import javax.mail.Session;                                                                                                                       
     import javax.mail.Transport;                                                                                                                     
     import javax.mail.internet.InternetAddress;                                                                                                      
     import javax.mail.internet.MimeMessage;                                                                                                          
                                                                                                                                                      
     /**                                                                                                                                              
     * @ClassName: Sendmail                                                                                                                           
     * @Description: 发送Email                                                                                                                          
     * @author: 孤傲苍狼                                                                                                                                  
     * @date: 2015-1-12 下午9:42:56                                                                                                                     
     *                                                                                                                                                
     */                                                                                                                                               
     public class Sendmail {                                                                                                                          
                                                                                                                                                      
         /**                                                                                                                                          
          * @param args                                                                                                                               
          * @throws Exception                                                                                                                         
          */                                                                                                                                          
         public static void main(String[] args) throws Exception {                                                                                    
                                                                                                                                                      
             Properties prop = new Properties();                                                                                                      
             prop.setProperty("mail.host", "smtp.sohu.com");                                                                                          
             prop.setProperty("mail.transport.protocol", "smtp");                                                                                     
             prop.setProperty("mail.smtp.auth", "true");                                                                                              
             //使用JavaMail发送邮件的5个步骤                                                                                                                    
             //1、创建session                                                                                                                            
             Session session = Session.getInstance(prop);                                                                                             
             //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态                                                                                               
             session.setDebug(true);                                                                                                                  
             //2、通过session得到transport对象                                                                                                               
             Transport ts = session.getTransport();                                                                                                   
             //3、使用邮箱的用户名和密码连上邮件服务器,发送邮件时,发件人需要提交邮箱的用户名和密码给smtp服务器,用户名和密码都通过验证之后才能够正常发送邮件给收件人。                                                        
             ts.connect("smtp.sohu.com", "gacl", "邮箱密码");                                                                                             
             //4、创建邮件                                                                                                                                 
             Message message = createSimpleMail(session);                                                                                             
             //5、发送邮件                                                                                                                                 
             ts.sendMessage(message, message.getAllRecipients());                                                                                     
             ts.close();                                                                                                                              
         }                                                                                                                                            
                                                                                                                                                      
         /**                                                                                                                                          
         * @Method: createSimpleMail                                                                                                                  
         * @Description: 创建一封只包含文本的邮件                                                                                                                 
         * @Anthor:孤傲苍狼                                                                                                                               
         *                                                                                                                                            
         * @param session                                                                                                                             
         * @return                                                                                                                                    
         * @throws Exception                                                                                                                          
         */                                                                                                                                           
         public static MimeMessage createSimpleMail(Session session)                                                                                  
                 throws Exception {                                                                                                                   
             //创建邮件对象                                                                                                                                 
             MimeMessage message = new MimeMessage(session);                                                                                          
             //指明邮件的发件人                                                                                                                               
             message.setFrom(new InternetAddress("gacl@sohu.com"));                                                                                   
             //指明邮件的收件人,现在发件人和收件人是一样的,那就是自己给自己发                                                                                                       
             message.setRecipient(Message.RecipientType.TO, new InternetAddress("gacl@sohu.com"));                                                    
             //邮件的标题                                                                                                                                  
             message.setSubject("只包含文本的简单邮件");                                                                                                        
             //邮件的文本内容                                                                                                                                
             message.setContent("你好啊!", "text/html;charset=UTF-8");                                                                                   
             //返回创建好的邮件对象                                                                                                                             
             return message;                                                                                                                          
         }                                                                                                                                            
     }                                                                                                                                                
                                                             

    3.4、发送包含内嵌图片的邮件

    package me.gacl.main;                                                                                                                             
                                                                                                                                                      
    import java.io.FileOutputStream;                                                                                                                  
    import java.util.Properties;                                                                                                                      
                                                                                                                                                      
    import javax.activation.DataHandler;                                                                                                              
    import javax.activation.FileDataSource;                                                                                                           
    import javax.mail.Message;                                                                                                                        
    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;                                                                                                         
                                                                                                                                                      
    /**                                                                                                                                               
    * @ClassName: Sendmail                                                                                                                            
    * @Description: 发送Email                                                                                                                           
    * @author: 孤傲苍狼                                                                                                                                   
    * @date: 2015-1-12 下午9:42:56                                                                                                                      
    *                                                                                                                                                 
    */                                                                                                                                                
    public class Sendmail {                                                                                                                           
                                                                                                                                                      
        /**                                                                                                                                           
         * @param args                                                                                                                                
         * @throws Exception                                                                                                                          
         */                                                                                                                                           
        public static void main(String[] args) throws Exception {                                                                                     
                                                                                                                                                      
            Properties prop = new Properties();                                                                                                       
            prop.setProperty("mail.host", "smtp.sohu.com");                                                                                           
            prop.setProperty("mail.transport.protocol", "smtp");                                                                                      
            prop.setProperty("mail.smtp.auth", "true");                                                                                               
            //使用JavaMail发送邮件的5个步骤                                                                                                                     
            //1、创建session                                                                                                                             
            Session session = Session.getInstance(prop);                                                                                              
            //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态                                                                                                
            session.setDebug(true);                                                                                                                   
            //2、通过session得到transport对象                                                                                                                
            Transport ts = session.getTransport();                                                                                                    
            //3、连上邮件服务器,需要发件人提供邮箱的用户名和密码进行验证                                                                                                          
            ts.connect("smtp.sohu.com", "gacl", "邮箱密码");                                                                                              
            //4、创建邮件                                                                                                                                  
            Message message = createImageMail(session);                                                                                               
            //5、发送邮件                                                                                                                                  
            ts.sendMessage(message, message.getAllRecipients());                                                                                      
            ts.close();                                                                                                                               
        }                                                                                                                                             
                                                                                                                                                      
        /**                                                                                                                                           
        * @Method: createImageMail                                                                                                                    
        * @Description: 生成一封邮件正文带图片的邮件                                                                                                                
        * @Anthor:孤傲苍狼                                                                                                                                
        *                                                                                                                                             
        * @param session                                                                                                                              
        * @return                                                                                                                                     
        * @throws Exception                                                                                                                           
        */                                                                                                                                            
        public static MimeMessage createImageMail(Session session) throws Exception {                                                                 
            //创建邮件                                                                                                                                    
            MimeMessage message = new MimeMessage(session);                                                                                           
            // 设置邮件的基本信息                                                                                                                              
            //发件人                                                                                                                                     
            message.setFrom(new InternetAddress("gacl@sohu.com"));                                                                                    
            //收件人                                                                                                                                     
            message.setRecipient(Message.RecipientType.TO, new InternetAddress("xdp_gacl@sina.cn"));                                                  
            //邮件标题                                                                                                                                    
            message.setSubject("带图片的邮件");                                                                                                             
                                                                                                                                                      
            // 准备邮件数据                                                                                                                                 
            // 准备邮件正文数据                                                                                                                               
            MimeBodyPart text = new MimeBodyPart();                                                                                                   
            text.setContent("这是一封邮件正文带图片<img src='cid:xxx.jpg'>的邮件", "text/html;charset=UTF-8");                                                      
            // 准备图片数据                                                                                                                                 
            MimeBodyPart image = new MimeBodyPart();                                                                                                  
            DataHandler dh = new DataHandler(new FileDataSource("src\\1.jpg"));                                                                       
            image.setDataHandler(dh);                                                                                                                 
            image.setContentID("xxx.jpg");                                                                                                            
            // 描述数据关系                                                                                                                                 
            MimeMultipart mm = new MimeMultipart();                                                                                                   
            mm.addBodyPart(text);                                                                                                                     
            mm.addBodyPart(image);                                                                                                                    
            mm.setSubType("related");                                                                                                                 
                                                                                                                                                      
            message.setContent(mm);                                                                                                                   
            message.saveChanges();                                                                                                                    
            //将创建好的邮件写入到E盘以文件的形式进行保存                                                                                                                  
            message.writeTo(new FileOutputStream("E:\\ImageMail.eml"));                                                                               
            //返回创建好的邮件                                                                                                                                
            return message;                                                                                                                           
        }                                                                                                                                             
    }                                                                                                                                                 
                                                             

    3.5、发送包含附件的邮件

     package me.gacl.main;                                                                                                                            
                                                                                                                                                      
     import java.io.FileOutputStream;                                                                                                                 
     import java.util.Properties;                                                                                                                     
                                                                                                                                                      
     import javax.activation.DataHandler;                                                                                                             
     import javax.activation.FileDataSource;                                                                                                          
     import javax.mail.Message;                                                                                                                       
     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;                                                                                                        
                                                                                                                                                      
     /**                                                                                                                                              
     * @ClassName: Sendmail                                                                                                                           
     * @Description: 发送Email                                                                                                                          
     * @author: 孤傲苍狼                                                                                                                                  
     * @date: 2015-1-12 下午9:42:56                                                                                                                     
     *                                                                                                                                                
     */                                                                                                                                               
     public class Sendmail {                                                                                                                          
                                                                                                                                                      
         /**                                                                                                                                          
          * @param args                                                                                                                               
          * @throws Exception                                                                                                                         
          */                                                                                                                                          
         public static void main(String[] args) throws Exception {                                                                                    
                                                                                                                                                      
             Properties prop = new Properties();                                                                                                      
             prop.setProperty("mail.host", "smtp.sohu.com");                                                                                          
             prop.setProperty("mail.transport.protocol", "smtp");                                                                                     
             prop.setProperty("mail.smtp.auth", "true");                                                                                              
             //使用JavaMail发送邮件的5个步骤                                                                                                                    
             //1、创建session                                                                                                                            
             Session session = Session.getInstance(prop);                                                                                             
             //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态                                                                                               
             session.setDebug(true);                                                                                                                  
             //2、通过session得到transport对象                                                                                                               
             Transport ts = session.getTransport();                                                                                                   
             //3、连上邮件服务器                                                                                                                              
             ts.connect("smtp.sohu.com", "gacl", "邮箱密码");                                                                                             
             //4、创建邮件                                                                                                                                 
             Message message = createAttachMail(session);                                                                                             
             //5、发送邮件                                                                                                                                 
             ts.sendMessage(message, message.getAllRecipients());                                                                                     
             ts.close();                                                                                                                              
         }                                                                                                                                            
                                                                                                                                                      
         /**                                                                                                                                          
         * @Method: createAttachMail                                                                                                                  
         * @Description: 创建一封带附件的邮件                                                                                                                   
         * @Anthor:孤傲苍狼                                                                                                                               
         *                                                                                                                                            
         * @param session                                                                                                                             
         * @return                                                                                                                                    
         * @throws Exception                                                                                                                          
         */                                                                                                                                           
         public static MimeMessage createAttachMail(Session session) throws Exception{                                                                
             MimeMessage message = new MimeMessage(session);                                                                                          
                                                                                                                                                      
             //设置邮件的基本信息                                                                                                                              
             //发件人                                                                                                                                    
             message.setFrom(new InternetAddress("gacl@sohu.com"));                                                                                   
             //收件人                                                                                                                                    
             message.setRecipient(Message.RecipientType.TO, new InternetAddress("xdp_gacl@sina.cn"));                                                 
             //邮件标题                                                                                                                                   
             message.setSubject("JavaMail邮件发送测试");                                                                                                    
                                                                                                                                                      
             //创建邮件正文,为了避免邮件正文中文乱码问题,需要使用charset=UTF-8指明字符编码                                                                                          
             MimeBodyPart text = new MimeBodyPart();                                                                                                  
             text.setContent("使用JavaMail创建的带附件的邮件", "text/html;charset=UTF-8");                                                                       
                                                                                                                                                      
             //创建邮件附件                                                                                                                                 
             MimeBodyPart attach = new MimeBodyPart();                                                                                                
             DataHandler dh = new DataHandler(new FileDataSource("src\\2.jpg"));                                                                      
             attach.setDataHandler(dh);                                                                                                               
             attach.setFileName(dh.getName());  //                                                                                                    
                                                                                                                                                      
             //创建容器描述数据关系                                                                                                                             
             MimeMultipart mp = new MimeMultipart();                                                                                                  
             mp.addBodyPart(text);                                                                                                                    
             mp.addBodyPart(attach);                                                                                                                  
             mp.setSubType("mixed");                                                                                                                  
                                                                                                                                                      
             message.setContent(mp);                                                                                                                  
             message.saveChanges();                                                                                                                   
             //将创建的Email写入到E盘存储                                                                                                                       
             message.writeTo(new FileOutputStream("E:\\attachMail.eml"));                                                                             
             //返回生成的邮件                                                                                                                                
             return message;                                                                                                                          
         }                                                                                                                                            
     }                                                                                                                                                
                                                                                                                                                      

     

    3.6、发送包含内嵌图片和附件的复杂邮件

                                                                                                                                                      
    package me.gacl.main;                                                                                                                             
                                                                                                                                                      
    import java.io.FileOutputStream;                                                                                                                  
    import java.util.Properties;                                                                                                                      
    import javax.activation.DataHandler;                                                                                                              
    import javax.activation.FileDataSource;                                                                                                           
    import javax.mail.Message;                                                                                                                        
    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;                                                                                                           
                                                                                                                                                      
    /**                                                                                                                                               
    * @ClassName: Sendmail                                                                                                                            
    * @Description: 发送Email                                                                                                                           
    * @author: 孤傲苍狼                                                                                                                                   
    * @date: 2015-1-12 下午9:42:56                                                                                                                      
    *                                                                                                                                                 
    */                                                                                                                                                
    public class Sendmail {                                                                                                                           
                                                                                                                                                      
        /**                                                                                                                                           
         * @param args                                                                                                                                
         * @throws Exception                                                                                                                          
         */                                                                                                                                           
        public static void main(String[] args) throws Exception {                                                                                     
                                                                                                                                                      
            Properties prop = new Properties();                                                                                                       
            prop.setProperty("mail.host", "smtp.sohu.com");                                                                                           
            prop.setProperty("mail.transport.protocol", "smtp");                                                                                      
            prop.setProperty("mail.smtp.auth", "true");                                                                                               
            //使用JavaMail发送邮件的5个步骤                                                                                                                     
            //1、创建session                                                                                                                             
            Session session = Session.getInstance(prop);                                                                                              
            //开启Session的debug模式,这样就可以查看到程序发送Email的运行状态                                                                                                
            session.setDebug(true);                                                                                                                   
            //2、通过session得到transport对象                                                                                                                
            Transport ts = session.getTransport();                                                                                                    
            //3、连上邮件服务器                                                                                                                               
            ts.connect("smtp.sohu.com", "gacl", "邮箱密码");                                                                                              
            //4、创建邮件                                                                                                                                  
            Message message = createMixedMail(session);                                                                                               
            //5、发送邮件                                                                                                                                  
            ts.sendMessage(message, message.getAllRecipients());                                                                                      
            ts.close();                                                                                                                               
        }                                                                                                                                             
                                                                                                                                                      
        /**                                                                                                                                           
        * @Method: createMixedMail                                                                                                                    
        * @Description: 生成一封带附件和带图片的邮件                                                                                                                
        * @Anthor:孤傲苍狼                                                                                                                                
        *                                                                                                                                             
        * @param session                                                                                                                              
        * @return                                                                                                                                     
        * @throws Exception                                                                                                                           
        */                                                                                                                                            
        public static MimeMessage createMixedMail(Session session) throws Exception {                                                                 
            //创建邮件                                                                                                                                    
            MimeMessage message = new MimeMessage(session);                                                                                           
                                                                                                                                                      
            //设置邮件的基本信息                                                                                                                               
            message.setFrom(new InternetAddress("gacl@sohu.com"));                                                                                    
            message.setRecipient(Message.RecipientType.TO, new InternetAddress("xdp_gacl@sina.cn"));                                                  
            message.setSubject("带附件和带图片的的邮件");                                                                                                        
                                                                                                                                                      
            //正文                                                                                                                                      
            MimeBodyPart text = new MimeBodyPart();                                                                                                   
            text.setContent("xxx这是女的xxxx<br/><img src='cid:aaa.jpg'>","text/html;charset=UTF-8");                                                     
                                                                                                                                                      
            //图片                                                                                                                                      
            MimeBodyPart image = new MimeBodyPart();                                                                                                  
            image.setDataHandler(new DataHandler(new FileDataSource("src\\3.jpg")));                                                                  
            image.setContentID("aaa.jpg");                                                                                                            
                                                                                                                                                      
            //附件1                                                                                                                                     
            MimeBodyPart attach = new MimeBodyPart();                                                                                                 
            DataHandler dh = new DataHandler(new FileDataSource("src\\4.zip"));                                                                       
            attach.setDataHandler(dh);                                                                                                                
            attach.setFileName(dh.getName());                                                                                                         
                                                                                                                                                      
            //附件2                                                                                                                                     
            MimeBodyPart attach2 = new MimeBodyPart();                                                                                                
            DataHandler dh2 = new DataHandler(new FileDataSource("src\\波子.zip"));                                                                     
            attach2.setDataHandler(dh2);                                                                                                              
            attach2.setFileName(MimeUtility.encodeText(dh2.getName()));                                                                               
                                                                                                                                                      
            //描述关系:正文和图片                                                                                                                              
            MimeMultipart mp1 = new MimeMultipart();                                                                                                  
            mp1.addBodyPart(text);                                                                                                                    
            mp1.addBodyPart(image);                                                                                                                   
            mp1.setSubType("related");                                                                                                                
                                                                                                                                                      
            //描述关系:正文和附件                                                                                                                              
            MimeMultipart mp2 = new MimeMultipart();                                                                                                  
            mp2.addBodyPart(attach);                                                                                                                  
            mp2.addBodyPart(attach2);                                                                                                                 
                                                                                                                                                      
            //代表正文的bodypart                                                                                                                           
            MimeBodyPart content = new MimeBodyPart();                                                                                                
            content.setContent(mp1);                                                                                                                  
            mp2.addBodyPart(content);                                                                                                                 
            mp2.setSubType("mixed");                                                                                                                  
                                                                                                                                                      
            message.setContent(mp2);                                                                                                                  
            message.saveChanges();                                                                                                                    
                                                                                                                                                      
            message.writeTo(new FileOutputStream("E:\\MixedMail.eml"));                                                                               
            //返回创建好的的邮件                                                                                                                               
            return message;                                                                                                                           
        }                                                                                                                                             
    }                                                                                                                                                 

     

    以上就是使用JavaMail的API创建邮件和发送邮件的全部内容。

     

    文章转载于:https://www.cnblogs.com/xdp-gacl/p/4216311.html

    展开全文
  • 2020-02-12 13:10:16.587 WARN 8628 --- [nio-9001-exec-7] o.s.b.actuate.mail.MailHealthIndicator : Mail health check failed javax.mail.AuthenticationFailedException: 535 Login Fail. Please enter your...
  • SpringBoot整合Mail

    千次阅读 2018-07-07 15:56:48
    SpringBoot实现邮件功能是非常的方便快捷的,因为SpringBoot默认有starter实现了Mail。 发送邮件应该是网站的必备功能之一,什么注册验证,忘记密码或者是给用户发送营销信息。 最早期的时候我们会使用JavaMail...
  • Bash: mail: command not found 原因 当前系统中缺少mail邮件相关的包。 解决方法 安装mail 让我们使用下面的命令之一安装邮件命令,根据您的操作系统。对于基于RHEL系统,从mailx 的 rpm包和基...
  • linux mail命令用法

    万次阅读 2018-05-05 17:47:12
    在Linux系统下mail命令的测试1. 最简单的一个例子: mail -s test admin@aispider.com这条命令的结果是发一封标题为test的空信给后面的邮箱,如果你有mta并且后面的邮箱不会挡这种可能莫名奇妙的信的时候,就能...
  • Centos8配置Mail

    千次阅读 2020-02-03 10:43:24
    Centos8配置Mail使用SMTP发送邮件mail、mailx和sendmailSSL、TLS和STARTTLS配置mail几个注意点:多账户解决警告其他 mail、mailx和sendmail 先看一下三者的关系:mail是mailx的别名,最初叫nail(与arch linux目前...
  • Springboot做项目部署发送邮件时,出现org.springframework.mail.MailAuthenticationException: Authentication failed; nested exception is javax.mail.AuthenticationFailedException: 535 问题 出现问题的代码:...
  • 登录网址:https://account.mail.ru/login ***********************注:本文仅作学习交流,如有侵权,请私信删除。 1. 访问登录页面: 获取cookie值 private bool GetIndex() { string url = ...
  • 文章目录You have new mail in /var/spool/mail/root You have new mail in /var/spool/mail/root 对于linux 学习者,经常会出现一些莫名的错误提示,在学习了几年后,我今天突然遇到一个提示,就是标题。博主从...
  • mail.jar和activation.jar

    千次下载 热门讨论 2015-11-29 13:03:54
    里面有javaMail的jar,其中有mail.jar和mail.jar的依赖activation.jar,其中若需要文档资源,我也上传了到CSDN上,可以自己在我的资源页面上找一下
  • 正常我们会用JavaMail相关api来写发送邮件的相关代码,但现在Spring Boot提供了一套集成spring-boot-starter-mail的更简易使用的封装。 基本概念 spring-boot-starter-mail: Spring框架提供了一个有用的实用...
  • Failed messages: com.sun.mail.smtp.SMTPSendFailedException: 554 DT:SPM 126 smtp7,DsmowACHo0FCY+hepsrTGQ–.1668S2 1592288066,please see http://mail.163.com/help/help_spam_16.htm?ip=xxxx&hostid=smtp...
  • Springboot admin 发送邮件失败:com.sun.mail.smtp.SMTPSenderFailedException: 553 Mail from must equal authorized user 发邮件已经是老生常谈了,今天又遇到了,而且又出了各种问题。我晕哦。 ...
  • 配置Mail使用SMTP发送邮件

    万次阅读 2018-06-13 20:12:53
    今天分享在Linux上使用mail命令通过SMTP对外发邮件。 mail、mailx和sendmail 先看一下三者的关系:mail是mailx的别名,最初叫nail(与arch linux目前用的S nail基因相同);mail是Heirloom的一个子项目,sendmail...
  • Centos 7 安装 Mail

    千次阅读 2020-03-06 12:46:37
    1、安装 sendmail mailx ...vi /etc/mail.rc # 指定邮箱 set from=576530483@qq.com # 邮箱协议 set smtp="smtp.qq.com" # 邮箱账号 set smtp-auth-user="576530483@qq.com" # 邮箱授权码,QQ邮箱...
  • 【JAVA】使用javax.mail发送邮件

    万次阅读 2018-05-26 09:51:58
    3、通过构建的properties文件和javax.mail.Authenticator具体类来创建一个javax.mail.Session。Session的创建,就相当于登录邮箱一样。剩下的自然就是新建邮件。 4、构建邮件内容,一般是javax.mail.internet....
  • linux命令_【mail】命令

    千次阅读 2019-06-20 22:49:29
    linux mail 命令参数: 使用mail发邮件时,必须先将sendmail服务启动。 mail –s “邮件主题” –c”抄送地址” –b “密送地址” -- -f 发送人邮件地址 –F 发件人姓名 < 要发送的邮件内容 三种常用格式...
  • $mail->IsSMTP(); $mail->CharSet ="UTF-8";//编码 $mail->Debugoutput = 'html';// 支持HTML格式 $mail->Host = "email-smtp.us-west-2.amazonaws.com";//HOST 地址 $mail->Port = 465;//端口 $...
  • transport.connect((String)props.get("mail.smtp.host"),username,password); transport.sendMessage(mimeMsg, mimeMsg.getAllRecipients()); //transport.sendMessage(mimeMsg,mimeMsg.getRecipients...
  • 使用javaxMail发送邮件

    千次阅读 2019-05-22 18:35:29
    使用javax mail发送邮件,首先将jar包添加进来,2019年了,应该都会用maven来构建项目吧 在项目的pom文件中加入javax.mail的依赖 <dependency> <groupId>javax.mail</groupId> <...
  • Linux mail命令用法

    万次阅读 2017-01-03 14:42:32
    在Linux系统下mail命令的测试 1. 最简单的一个例子:  mail -s test admin@aispider.com 这条命令的结果是发一封标题为test的空信给后面的邮箱,如果你有mta并且后面的邮箱不会挡这种可能莫名奇妙的信的...
  • ubuntu配置mail邮件服务器

    千次阅读 2019-04-14 14:28:55
    最近在看项目中前辈写过的shell,当成功或失败时有邮件发出,并且发送邮件的命令很简单,只是一个mail命令,由于之前不是很了解,所以简单看了一下,并在自己的虚拟机上测试了一下。所以此文的目的主要是给像我一样...
  • java mail 包 (activation.jar, mail.jar)

    千次下载 热门讨论 2008-09-21 14:33:05
    java 发送邮件包 解压后 把activation.jar和mail.jar 拷贝到 WEB-INF/lib 下就可以直接在项目中使用

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 488,717
精华内容 195,486
关键字:

mail