/**
* JavaMail SMTP服务器发送邮件程序示例
* 扮演SMTP服务器角色与邮件客户端软件最大的区别就是:
* SMTP服务器需要解析不同接收人邮件地址主机名对应的SMTP服务器主机名
* ,同时不需要验证
* 注意:由于条件的限制,此程序是运行不成功的,原因见下面的注释说明
*/ import java.util.Date;
import java.util.Properties;
import javax.mail.Message.RecipientType;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.naming.NamingException;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
/**
* @author Bill Tu
* @since May 27, 2011(12:21:41 PM)
*
*/
public class SMTPSenderTest {
public static String getSMTPHost(String domain,String dnsServer) throws NamingException{
DirContext ctx=new InitialDirContext();
Attributes mxAttrs=null;
if(null != dnsServer){
mxAttrs=ctx.getAttributes("dns://"+dnsServer+"/"+domain,new String[]{"MX"});
}else{
mxAttrs=ctx.getAttributes("dns:/"+domain,new String[]{"MX"});
} String mx=(String) mxAttrs.get("MX").get();
String smtpServerName=mx.substring(mx.indexOf(" ")+1);
return smtpServerName;
} private static Message getMessage(Session session) throws AddressException, MessagingException{
String from="iwtxokhtd@163.com";
String subject="hello";
String content="this is content"; MimeMessage msg=new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
msg.setSubject(subject);
msg.setText(content);
msg.setSentDate(new Date()); return msg; } private static Session getSession(){
Properties props=new Properties();
//设置ehlo命令中的主机名,若检测到主机名与其IP地址一致,则认为这时的发送方是SMTP服务器,就不需要验证;否则就是邮件客户端软件,则需要验证。
props.put("mail.smtp.localhost", "mail.digu.com");
props.put("mail.smtp.auth", "false");
props.put("mail.smtp.port", "25");
Session session=Session.getDefaultInstance(props);
session.setDebug(true);
return session;
} @SuppressWarnings("static-access")
private static void sendEmail(Message message,Session session,String to)
throws AddressException, MessagingException, NamingException{
message.setRecipients(RecipientType.TO, InternetAddress.parse(to));
message.saveChanges(); Transport transport=session.getTransport("smtp"); String domain=to.substring(to.indexOf("@")+1);
String host=getSMTPHost(domain,null); transport.connect(host, null, null);
transport.send(message, message.getRecipients(Message.RecipientType.TO)); transport.close();
} public static void main(String []args)
throws AddressException, MessagingException, NamingException{
String []to=new String[]{"277515444@qq.com","277515445@qq.com"};
Session session=getSession();
Message msg=getMessage(session);
for(String email:to){
sendEmail(msg,session,email);
}
}
}

  

JavaMail SMTP服务器发送邮件程序示例 java通过dns服务器解析ip地址的更多相关文章

  1. Linux服务器架设篇,DNS服务器(二),cache-only DNS服务器的搭建

    一.理论基础 什么是cache-only服务器?即不具备自己正反解Zone的能力,仅进行缓存或转发的DNS服务器.其实它也称不上是DNS服务器.但是也是一个必备的知识点. 这种服务器只有缓存搜索结果的 ...

  2. JAVA 长整型转换为IP地址的方法

    JAVA 长整型转换为IP地址的方法 代码例如以下: /** * 整型解析为IP地址 * @param num * @return */ public static String int2iP(Lon ...

  3. JAVA从本机获取IP地址

    JAVA从本机获取IP地址 论述: 此篇博客是在工作的时候,需要获得当前网络下面正确的ip地址,在网上查阅很多博客,网上一个比较普遍的说法是通过InetAddress.getLocalHost().g ...

  4. Java 获取客服端ip地址

    Java 获取客服端ip地址 /** * <html> * <body> * <P> Copyright 1994 JsonInternational</p& ...

  5. java如何获取访问真实IP地址?

    java如何获取访问真实IP地址 解决方法: 获取请求主机IP地址,如果通过代理进来,则透过防火墙获取真实IP地址,如果没有代理,则获取真实ip public static String getIp( ...

  6. JAVA 获取指定网址的IP地址 实例

    如今买票是一大难事,在高峰时段 打开12306网站,慢的像蜗牛,想到以前用修改hosts文件来登录Google(Hosts是一个没有扩展名的系统文件,可以用记事本等工具打开,其作用就是将一些常用的网址 ...

  7. java获取当前网站的IP地址

    package ip; import java.net.InetAddress; import java.net.UnknownHostException; /** * * @author * */ ...

  8. java 获取访问主机的ip地址

    Java的api的说法: getHeader public java.lang.String getHeader(java.lang.String name) Return the first val ...

  9. java获取访问者真实的IP地址

    众所周知java方法request.getremoteaddr()可以获得访问者的IP地址 但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了.如果使用了反向代理软件 ...

随机推荐

  1. (Object String 类中的方法练习)

    package com.zs.demo1; public class Demo1 { public static void main(String[] args) { fun1(); fun2(); ...

  2. SQL*Plus连接符拼接输出

    在日常工作中,可能需要使用重复的命令,修改的只是某个不同字段的值,可以使用连接字符串进行拼接 #本篇文档: 一.使用连接符拼接SQL 二.Spool输出查询结果 三.Spool输出xml/  html ...

  3. sudo: sorry, you must have a tty to run sudo

    使用ssh进行无密访问,并发送执行命令的时候遇到了如题的错误 执行命令ssh user@host "sudo rm /data/test,txt" sudo: sorry, you ...

  4. Educational Codeforces Round 54 ---1076ABCDE

    1076A---Minimizing the String[字符串] http://codeforces.com/contest/1076/problem/A 题意: 删掉字符串中的一个字符使得得到的 ...

  5. sudo命令 和限制root 远程登陆

    1.对sudo命令的配制,输入 visudo 然后,找到92行进行以下配制 以下就是效果 比如: 如果要同时给两个普通用户设置这样子的权限,就可以用另一种方式,下面这种方式不可取的 而是用这种 效果如 ...

  6. c++——基本概念

    如何理解c/c++中的指针?每种编程语言都使用指针,但Java.c#等将指针隐藏,而c/c++将指针暴露给了用户(程序员)https://www.cnblogs.com/gxcdream/p/4805 ...

  7. 2018.4.23 git常用操作命令收集(转)

    Git常用操作命令收集: 1. 远程仓库相关命令 检出仓库:$ git clone git://github.com/jquery/jquery.git 查看远程仓库:$ git remote -v ...

  8. linux下文件校验的使用

    为解决官方发布的软件包被别人更改或者软件在传输过程中出现传输错误等问题,软件官方在提供软件包的同时,还提供一个保存MD5校验码的文件. Linux/unix中可以使用如下命令获得校验码和官方的校验码对 ...

  9. [zoj4045][思维+dfs]

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4045 题意:给一棵树.这棵树有n个节点,问你这个图能不能分成k个分块.这个 ...

  10. java中类与方法叙述正确的是

    这道题的4个选项全是错的.  A.一个文件中,可以有多个public class  public class Main { public class Inner{ } } 即,外部类为public,还 ...