Java远程调用邮件服务器,实现邮件发送
来源:互联网 发布:js中sleep 编辑:程序博客网 时间:2024/06/03 12:37
首先我们需要把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地址,比如:
- <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>
重新启动邮件服务器。
下面就添加一个用户到邮件服务器,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 = "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邮箱就可以收到了。
对于腾讯的过滤,如果不让他过滤,我估计得交钱给腾讯了,其他的163的,新浪的大家也可以试一下。
http://blog.csdn.net/sunchaoenter/article/details/9280815
- Java远程调用邮件服务器,实现邮件发送
- Java远程调用邮件服务器,实现邮件发送
- Java远程调用邮件服务器,实现邮件发送
- Java远程调用邮件服务器,实现邮件…
- Java调用阿里SMTP服务器实现邮件发送
- 使用php mailer类调用远程SMTP服务器发送邮件
- java实现邮件发送
- java实现邮件发送
- java 实现发送邮件
- java 实现邮件发送
- java发送邮件实现
- Java实现发送邮件
- Java 实现邮件发送
- java实现发送邮件
- java实现邮件发送
- Java实现邮件发送
- Java实现发送邮件
- JAVA实现邮件发送
- LeetCode 3.Longest Substring Without Repeating Characters
- Android Factory Reset flow
- Windows内核驱动开发入门学习资料
- 提高PHP运行效率的小细节
- 从客户端中检测到有潜在危险的 request.form值[解决方法]
- Java远程调用邮件服务器,实现邮件发送
- 解释object c 中经常出现的initWith... 和....With...
- 20150123 Russia’s invasion of Ukraine should cause much more than a hiccup in relations
- 定义属性时,什么情况使用copy、assign、retain?
- Resource of MS technology.txt
- 译文 20150123 Russia’s invasion of Ukraine should cause much more than a hiccup in relations
- 史上最牛软件下载网站
- 十道海量数据处理面试题
- 快速开发移动app