`
kjkhi
  • 浏览: 184509 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

使用Spring mail通过socks代理发送邮件

阅读更多

Spring框架提供了JavaMailSender接口及其实现类JavaMailSenderImpl,基于这个类可以更加方便实现发送邮件功能。

在web工程中,可以把JavaMailSender交由Spring IOC管理。如下面的配置:

 

<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
		<property name="defaultEncoding" value="${email.encoding}"></property>
		<property name="host" value="${email.host}"></property>
		<property name="username" value="${email.username}"></property>
		<property name="password" value="${email.password}"></property>
		<property name="protocol" value="${email.protocal}"></property>
		<property name="javaMailProperties">
			<props>
				<!-- 让服务器检验用户密码是否正确 -->
				<prop key="mail.smtp.auth">true</prop>
				<prop key="mail.smtp.timeout">25000</prop>
				<prop key="mail.debug">true</prop>
			</props>
		</property>
	</bean>

  使用时,只需在Spring容器中获取到JavaMailSenderImpl实例,调用JavaMailSender.send()方法,即可实现发送邮件的功能。

由于,公司使用的网络不能直接访问外网,而发送邮件的却是对外的。所以需要设置代理服务器。而java.mail是不知道http代理的,只能通过socks V4 或者 V5代理发送邮件。官方原文

Q: How do I configure JavaMail to work through my proxy server?
A: JavaMail does not currently support accessing mail servers through a web proxy server. One of the major reasons for using a proxy server is to allow HTTP requests from within a corporate network to pass through a corporate firewall. The firewall will typically block most access to the Internet, but will allow requests from the proxy server to pass through. In addition, a mail server inside the corporate network will perform a similar function for email, accepting messages via SMTP and forwarding them to their ultimate destination on the Internet, and accepting incoming messages and sending them to the appropriate internal mail server.

If your proxy server supports the SOCKS V4 or V5 protocol (http://www.socks.nec.com/aboutsocks.html, RFC1928) and allows anonymous connections, and you're using JDK 1.5 or newer and JavaMail 1.4.5 or newer, you can configure a SOCKS proxy on a per-session, per-protocol basis by setting the "mail.smtp.socks.host" property as described in the javadocs for the com.sun.mail.smtp package. Similar properties exist for the "imap" and "pop3" protocols.

If you're using older versions of the JDK or JavaMail, you can tell the Java runtime to direct all TCP socket connections to the SOCKS server. See the Networking Properties guide for the latest documentation of the socksProxyHost and socksProxyPort properties. These are system-level properties, not JavaMail session properties. They can be set from the command line when the application is invoked, for example: java -DsocksProxyHost=myproxy .... This facility can be used to direct the SMTP, IMAP, and POP3 communication from JavaMail to the SOCKS proxy server. Note that setting these properties directs all TCP sockets to the SOCKS proxy, which may have negative impact on other aspects of your application.

Without such a SOCKS server, if you want to use JavaMail to directly access mail servers outside the firewall, the firewall will need to be configured to allow such access. JavaMail does not support access through a HTTP proxy web server.

  所以在调用send()方法发送邮件之前,必须设置代理服务器。

这里用两种方式实现代理,1、设置jvm的参数,2、在程序中通过Properties实现。使用的参数可参照官网文档:Networking Properties,本文主要与大家交流第二种方式。

在web 启动是,加载一个自定义的Servlet,该Servlet就是实现了,设置代理服务器的功能。如部分代码:

 

System.getProperties().put("proxySet", true);
			System.getProperties().put("http.proxyHost", Config.getProperties("http.proxyHost"));
			System.getProperties().put("http.proxyPort", Config.getProperties("http.proxyPort"));
			System.getProperties().put("socksProxySet", true);
			System.getProperties().put("socksProxyHost", Config.getProperties("http.proxyHost"));
			System.getProperties().put("socksProxyPort", Config.getProperties("http.proxyPort"));

  同样,在java mail的官方文档中也有提到,如果使用的是jdk 1.5以上和java.mail 1.4.5,可以通过javaMailProperties配置,更多配置项,参考 com.sun.mail.smtp package。 <!-- javaMailSender -->

	<bean id="javaMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
		<property name="defaultEncoding" value="${email.encoding}"></property>
		<property name="host" value="${email.host}"></property>
		<property name="username" value="${email.username}"></property>
		<property name="password" value="${email.password}"></property>
		<property name="protocol" value="${email.protocal}"></property>
		<property name="javaMailProperties">
			<props>
				<!-- 让服务器检验用户密码是否正确 -->
				<prop key="mail.smtp.auth">true</prop>
				<prop key="mail.smtp.timeout">25000</prop>
				<prop key="mail.debug">true</prop>
				<prop key="mail.smtp.ssl.enable">true</prop>
				<prop key="mail.smtp.socks.host">cmproxy.gmcc.net</prop>
				<prop key="mail.smtp.socks.port">8081</prop>
				<prop key="mail.smtp.socketFactory.class">javax.net.ssl.SSLSocketFactory</prop>
			</props>
		</property>
	</bean>
 
0
5
分享到:
评论

相关推荐

    spring mail通过代理发送邮件

    标题中的“spring mail通过代理发送邮件”指的是使用Spring框架中的JavaMailSender接口和相关的支持类,通过设置代理服务器来发送电子邮件。在某些网络环境中,直接访问SMTP服务器可能会受到限制,这时就需要通过...

    socks5代理配置及发送邮件.rar

    文档详细描述,linux不通外网的情况下,通过在另一台通外网的服务器搭建socks5代理服务,不通外网的服务器通过socks5代理,成功向外网发送邮件的功能。

    修改mail源码 支持socks代理

    修改mail源码 支持socks代理 程序中需手动加入参数 static { System.getProperties().setProperty("netease.mail.socks.proxy.url", "代理服务器url"); System.getProperties().setProperty("netease.mail.socks...

    利用SOCKS代理向网络服务器发送请求的vc 示例.rar

    socksapp -vc 通过SOCKS代理向pop.mail.yahoo.com等服务器发送一个用户登录请求,并取得该POP3服务器的响应。该程序演示了如何使得自己的网络程序通透过SOCKS防火墙而向远程服务器通信。  要求运行socksapp的主机...

    SOCKS文献代理的使用方法

    - **详细教程**:http://www.sslm2008.cn/thread-2098-1-1.html 提供了更加详细的SOCKS代理使用教程,包括图文并茂的说明。 #### 七、总结 通过本文的介绍,我们不仅了解了如何使用SocksCapV2.38软件配置SOCKS代理...

    Socks5进程代理DLL调用_Sockset_代理_socks5_dll_进程代理_

    Socks5进程代理DLL,配套调用表,在压缩包里面

    使用Java基于Netty+Socks5+TLS实现的代理服务.zip

    Socks5是一种网络协议,它允许应用程序通过代理服务器进行网络通信。与HTTP代理不同,Socks5协议不关心应用层的具体协议,如FTP、HTTP或SMTP等,因此具有更广泛的适用性。Socks5支持多种认证方式,并提供TCP连接,使...

    socks5 c#简单代理源码

    SOCKS5是一种广泛使用的互联网协议,用于在客户端和目标服务器之间建立安全的隧道,以实现代理服务。它支持多种网络协议,如TCP和UDP,同时提供了身份验证、IPv4、IPv6以及域名支持。SOCKS5代理协议主要分为以下几个...

    基于Netty框架的Socks5代理服务器.zip

    基于Netty框架的Socks5代理服务器 内容概要 本项目是一个基于Netty框架实现的Socks5代理服务器,支持Socks5协议的代理功能。项目包含了多个模块,涵盖了从客户端连接处理到服务器端代理转发的完整流程。主要功能...

    第70天:内网安全-域横向内网漫游Socks代理隧道技术1

    内网安全是信息技术领域中的一个重要话题,特别是在企业网络环境中,域横向内网漫游Socks代理隧道技术是一种解决内网间通信难题的有效方法。本文将详细介绍相关知识点,并通过实际案例来展示如何应用这些技术。 ...

    chrome单独设置http与socks代理的方法(不使用操作系统代理)

    chrome单独设置http与socks代理的方法(不使用操作系统代理)

    Node.js-hpts(http-proxy-to-socks)一个nodejs客户端将socks代理转换为http代理

    hpts(http-proxy-to-socks) 一个nodejs客户端将socks代理转换为http代理

    代理IP检测工具,HTTP/HTTPS/SOCKS5协议连通率和延迟检测

    代理IP检测工具会通过发送测试请求并记录响应时间来计算平均延迟。 优亦云代理IP工具作为一款专业的检测软件,它可能具备以下功能: 1. **批量检测**:允许用户一次性输入大量代理IP,工具会逐一测试它们的连通性...

    C#写的代理服务器源代码 功能强大 支持http和socks5

    HTTP代理主要处理Web浏览器的请求,而SOCKS5代理则是一个更通用的协议,适用于多种网络应用,如FTP、邮件客户端等。代理服务器在此扮演的角色是中转站,允许用户通过代理服务器访问互联网,从而提高匿名性或解决网络...

    用C#实现的SOCKS5代理服务器源代码.rar

    SOCKS5是一种网络协议,它允许客户端通过代理服务器与任意IP地址的远程服务器进行通信。在C#中实现一个SOCKS5代理服务器涉及到多个关键概念和技术,这些包括网络编程、套接字(Sockets)、协议解析以及多线程等。...

    基于邮件交换(MX)与SMTP协议发送邮件

    基于邮件交换(MX)与SMTP协议发送邮件,可以无须SMTP服务器中转直接将E-Mail电子邮件发送到对方邮箱,代码中提供了网卡信息获取类,可以获取本机IP地址、子网掩码、DNS、Wins、网卡MAC地址等相关信息;还提供了SMTP协议...

    基于Linux操作系统的Socks代理服务.pdf

    《基于Linux操作系统的Socks代理服务》 在现代网络环境中,随着互联网的广泛使用,网络管理变得日益重要。...对于希望提升网络管理效率和安全性的组织来说,了解并掌握Socks代理服务的使用和配置至关重要。

Global site tag (gtag.js) - Google Analytics