自己搭建的james服务器,一切皆如普善园的博文http://zhaipuhong.iteye.com/blog/213246
在本机上接受,发送一切正常。
测试程序是用的spring对mail的支持
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.mail.*;
public class TestMail
{
public static void main(String[] args) throws Exception
{
ApplicationContext ctx = new FileSystemXmlApplicationContext("src\\edu\\bjtu\\rjxy\\app\\test\\springMail.xml");
MailSender sender = (MailSender)ctx.getBean("mailSender");
SimpleMailMessage smm = new SimpleMailMessage();
smm.setTo("jkf@localhost");
smm.setFrom("jkfzero@localhost");
smm.setSubject("简单的测试");
smm.setText("这是关于Spring Mail抽象层的简单测试");
// System.out.println("message");
sender.send(smm);
}
}
<?xml version="1.0" encoding="gb2312"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> <property name="host"> <!-- 邮件服务器地址 --> <value>localhost</value> </property> <property name="javaMailProperties"> <props> <!-- 是否使用用户名密码验证 --> <prop key="mail.smtp.auth">true</prop> <!-- --> <prop key="mail.smtp.timeout">25000</prop> </props> </property> <!-- 登录邮件服务器的 邮箱 的用户名 --> <property name="username"> <value>jkfzero</value> </property> <!-- 登录邮件服务器的 邮箱 的密码 --> <property name="password"> <value>jkfzero</value> </property> </bean> </beans>
发送正常。向外网邮箱发送邮件也成功。
然后在公司测试,本机向本机发送,发送,接受正常。
因为公司通过代理上网,采用基本的JMail发送代码测试,在代码中添加
props.put("socksProxyHost", Sender.SOCKS_PROXY);
props.put("socksProxyPort", Sender.SOCKS_PORT);
控制台没有抛出任何异常,显示的发送正常,但是在外网的邮箱没有收到。
再次向本机发送,一切正常。。。
还是不太了解原理,可能代理服务器对代理的类型和域进行了一些限制。