您的位置:首页 > 编程语言 > Java开发

Java远程调用邮件服务器,实现邮件发送

2015-01-23 13:29 483 查看
邮件服务器使用的Apache的James,Java写的开源的,而且方便调用。远程调用使用的是Java Mail的API。

首先我们需要把James这个邮件服务器跑起来,官网下载地址:http://james.apache.org/,下载先来之后直接解压,直接运行bin\run.bat。出现如下图所示说明运行OK了。



如果运行不成功,可能是你的JDK或者环境变量没有配置好,这个我就不说了。

运行起来之后,会在apps\james\SAR-INF这个目录下生成一个config.xml文件,这就是邮件服务器的配置文件。打开它,修改一些配置:

1.修改<postmaster>localhost</postmaster>,改成你自己的服务器域名,比如:<postmaster>support@zhangyuan123.com</postmaster>

2.修改这些,也是改成自己的

<servernames autodetect="false" autodetectIP="false">

<servername>zhangyuan123.com</servername>

</servernames>

3.修改dns server,这是为了可以发外网邮件,查看DNS地址使用ipconfig/all,然后在配置文件中dnsserver节点下加入server地址,比如:

[html] view
plaincopy

<dnsserver>

<servers>

<!--Enter ip address of your DNS server, one IP address per server -->

<!-- element. -->

<!--

<server>127.0.0.1</server>

-->

<server>114.114.114.114</server>

<server>8.8.8.8</server>

</servers>

<!-- Change autodiscover to false if you would like to turn off autodiscovery -->

<!-- and set the DNS servers manually in the <servers> section -->

<autodiscover>false</autodiscover>

<authoritative>false</authoritative>

<!-- Maximum number of entries to maintain in the DNS cache -->

<maxcachesize>50000</maxcachesize>

</dnsserver>

4.找到C:\Windows\System32\drivers\etc\host文件,其中加入127.0.0.1 zhangyuan123.com

重新启动邮件服务器。

下面就添加一个用户到邮件服务器,James是使用telnet进行命令行操作的。win7默认没有打开telnet服务,可以搜一下如何打开。然后在命令行输入telnet zhangyuan123.com 4555,输入用户名root,密码root。添加一个用户使用命令:adduser admin admin,其他命令我就不说了。

添加完了之后我们就开始使用客户端模仿调用服务器发送一封邮件。

[java] view
plaincopy

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 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邮箱地址换成自己的就行。最后run一把就OK了。但是QQ邮箱自身有过滤机制,它会认为来自zhangyuan123.com的邮件是垃圾邮件,你需要设置一下白名单:


添加域名白名单:



再发每一次,QQ邮箱就可以收到了。

对于腾讯的过滤,如果不让他过滤,我估计得交钱给腾讯了,其他的163的,新浪的大家也可以试一下。
http://blog.csdn.net/sunchaoenter/article/details/9280815
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: