邮件服务器使用的Apache的James,Java写的开源的,而且方便调用。远程调用使用的是Java Mail的API。
首先我们需要把James这个邮件服务器跑起来,官网下载地址:http://james.apache.org/,下载先来之后直接解压,直接运行bin\run.bat。出现如下图所示说明运行OK了。
如果运行不成功,可能是你的JDK或者环境变量没有配置好,这个我就不说了。
运行起来之后,会在apps\james\SAR-INF这个目录下生成一个config.xml文件,这就是邮件服务器的配置文件。打开它,修改一些配置:
1.修改localhost,改成你自己的服务器域名,比如:support@zhangyuan123.com
2.修改这些,也是改成自己的
3.修改dns server,这是为了可以发外网邮件,查看DNS地址使用ipconfig/all,然后在配置文件中dnsserver节点下加入server地址,比如:
- <</span>dnsserver>
-
<</span>servers> -
-
-
-
<</span>server>114.114.114.114</</span>server> -
<</span>server>8.8.8.8</</span>server> -
</</span>servers> -
-
-
<</span>autodiscover>false</</span>autodiscover> -
<</span>authoritative>false</</span>authoritative> -
-
-
<</span>maxcachesize>50000</</span>maxcachesize> -
</</span>dnsserver>
重新启动邮件服务器。
下面就添加一个用户到邮件服务器,James是使用telnet进行命令行操作的。win7默认没有打开telnet服务,可以搜一下如何打开。然后在命令行输入telnet
添加完了之后我们就开始使用客户端模仿调用服务器发送一封邮件。
- package
org.sunchao; -
- import
java.io.IOException; - import
java.util.Properties; -
- import
javax.mail.Authenticator; - import
javax.mail.Folder; - import
javax.mail.Message; - import
javax.mail.MessagingException; - import
javax.mail.PasswordAuthentication; - import
javax.mail.Session; - import
javax.mail.Store; - import
javax.mail.internet.InternetAddress; - import
javax.mail.internet.MimeMessage; - import
javax.mail.internet.MimeUtility; -
- public
class Mail { -
// String host = "smtp.163.com"; // 163的smtp服务器 -
// 本机smtp服务器 -
private static final String HOST = "zhangyuan123.com"; -
// 邮件发送人的邮件地址 -
private static final String FROM = "admin@" + HOST; -
// 邮件接收人的邮件地址 -
private static final String TO = "test@qq.com"; -
// 发件人的邮件帐户 -
private static final String USERNAME = "admin"; -
// 发件人的邮件密码 -
private static final String PASSWORD = "admin"; -
-
public static void main(String[] args) { -
Mail.sendMail(); -
// Mail.getMail(); -
} -
-
-
public static void sendMail() { -
// 创建Properties 对象 -
Properties props = System.getProperties(); -
// 添加smtp服务器属性 -
props.put("mail.smtp.host", HOST); -
props.put("mail.smtp.auth", "true"); -
-
// 创建邮件会话 -
Session session = Session.getDefaultInstance(props, -
new Authenticator() { -
@Override -
public PasswordAuthentication getPasswordAuthenticatio n() { -
return new PasswordAuthentication(USERNAME, PASSWORD); -
} -
}); -
try { -
// 定义邮件信息 -
MimeMessage message = new MimeMessage(session); -
message.setFrom(new InternetAddress(FROM)); -
message.addRecipient(Message.RecipientType.TO, new InternetAddress( -
TO)); -
message.setSubject("I hava my own mail server"); -
message -
.setText("From now, you have your own mail server, congratulation!"); -
// 发送消息 -
session.getTransport("smtp").send(message); -
// Transport.send(message); //也可以这样创建Transport对象发送 -
System.out.println("SendMail Process Over!"); -
} catch (MessagingException e) { -
e.printStackTrace(); -
} -
} -
-
-
public static void getMail() { -
String host = "localhost"; -
final String username = "admin"; -
final String password = "admin"; -
// 创建Properties 对象 -
Properties props = new Properties(); -
-
// 创建邮件会话 -
Session session = Session.getDefaultInstance(props, -
new Authenticator() { -
@Override -
public PasswordAuthentication getPasswordAuthenticatio n() { -
return new PasswordAuthentication(username, password); -
} -
}); -
try { -
// 获取邮箱的pop3存储 -
Store store = session.getStore("pop3"); -
store.connect(host, username, password); -
// 获取inbox文件 -
Folder folder = store.getFolder("INBOX"); -
folder.open(Folder.READ_ONLY); // 打开,打开后才能读取邮件信息 -
// 获取邮件消息 -
Message message[] = folder.getMessages(); -
for (int i = 0, n = message.length; i < n; i++) { -
System.out.println(i + ": " + message[i].getFrom()[0] + "\t" -
+ message[i].getSubject()); -
try { -
message[i].writeTo(System.out); -
} catch (IOException e) { -
e.printStackTrace(); -
} -
} -
// 关闭资源 -
folder.close(false); -
store.close(); -
} catch (MessagingException e) { -
e.printStackTrace(); -
} -
System.out.println("GetMail Process Over!"); -
} -
-
// 邮件主题中文字符转换 -
public static String transferChinese(String strText) { -
try { -
strText = MimeUtility.encodeText(new String(strText.getBytes(), -
"GB2312"), "GB2312", "B"); -
} catch (Exception ex) { -
ex.printStackTrace(); -
} -
return strText; -
} - }
添加域名白名单:
再发每一次,QQ邮箱就可以收到了。
对于腾讯的过滤,如果不让他过滤,我估计得交钱给腾讯了,其他的163的,新浪的大家也可以试一下。
转至:http://blog.csdn.net/sunchaoenter/article/details/9280815