郵件服務器使用的Apache的James,Java寫的開源的,而且方便調用。遠程調用使用的是Java Mail的API。
首先我們需要把James這個郵件服務器跑起來,官網下載地址:http://james.apache.org/,下載先來之後直接解壓,直接運行bin\run.bat。出現如下圖所示說明運行OK了。
如果運行不成功,可能是你的JDK或者環境變量沒有配置好,這個我就不說了。
運行起來之後,會在apps\james\SAR-INF這個目錄下生成一個config.xml文件,這就是郵件服務器的配置文件。打開它,修改一些配置:
1.修改localhost,改成你自己的服務器域名,比如:[email protected]
2.修改這些,也是改成自己的
zhangyuan123.com
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 zhangyuan123.com 4555,輸入用戶名root,密碼root。添加一個用戶使用命令:adduser admin admin,其他命令我就不說了。
添加完了之後我們就開始使用客戶端模仿調用服務器發送一封郵件。
- 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 = "[email protected]";
- // 發件人的郵件帳戶
- 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 getPasswordAuthentication() {
- 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 getPasswordAuthentication() {
- 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