`
hellojim
  • 浏览: 52302 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

关于一个 send E-mail 问题

    博客分类:
  • JAVA
阅读更多

package com.oa.modules.personnel.user.domain;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Hashtable;
import java.util.Properties;

import javax.activation.DataHandler;
import javax.activation.FileDataSource;
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.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.Attribute;
import javax.naming.directory.Attributes;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;

public class MailSend {
 
 
 public static String protocol = "smtp";
 
 private String from = "hellojim@sina.com";  //发收人
 private String to;
 private String subject = "图文并茂的E-mail发送测试";
 private String body = "图文并茂的E-mail发送测试<a href='http://hellojim.iteye.com'>Welcome access my blog my name is zhangxiaojun</a><br>" +
      "<img src='cid:zxj'>";
 private String server = "smtp.sina.com.cn";
 
 public String getBody() {
  return body;
 }

 public void setBody(String body) {
  this.body = body;
 }

 public String getFrom() {
  return from;
 }

 public void setFrom(String from) {
  this.from = from;
 }

 public String getServer() {
  return server;
 }

 public void setServer(String server) {
  this.server = server;
 }

 public String getSubject() {
  return subject;
 }

 public void setSubject(String subject) {
  this.subject = subject;
 }

 public String getTo() {
  return to;
 }

 public void setTo(String to) {
  
  this.to = to;
 }

 public static void main(String[] args) throws Exception {
  
  
  
  
  MailSend sender = new MailSend();     //实例化一个 MailSend 对象
  sender.setTo("jim.zhang.js@gmail.com");  //设置一下收件人地址
  
  boolean flg = sender.sendMessage(sender); //调用 sendMessage 就可以发送 E-mail
  
  if(flg == true) {
   System.out.println("哈哈...邮件发送成功");
  } else {
   System.out.println("呵呵...邮件发送失败");
  }
  
  
 }
 
 //此方法根据传入的 session 创建一个E-mail 并返回
 public MimeMessage createMessage(Session session,MailSend sender) throws Exception {
  
  //创建一个邮件对象
  MimeMessage message = new MimeMessage(session);
  //设置 邮件 的发件人
  message.setFrom(new InternetAddress(sender.from));
  //设置 邮件 的收件人,及发送方法
  message.setRecipients(Message.RecipientType.TO,InternetAddress.parse(sender.to));
  //设置 邮件 的主题
  message.setSubject(sender.subject);
  
  MimeMultipart multipart = new MimeMultipart("related");
  //创建一个邮件主体的文字部分
  MimeBodyPart htmlBodyPart = new MimeBodyPart();
  htmlBodyPart.setContent(body,"text/html;charset=gb2312");
  multipart.addBodyPart(htmlBodyPart);
  //创建一个邮件主体的图片部分
  MimeBodyPart gifBodyPart = new MimeBodyPart();
  FileDataSource fds = new FileDataSource("d:\\zxj.gif");
  gifBodyPart.setDataHandler(new DataHandler(fds));
  gifBodyPart.setContentID("zxj");
  multipart.addBodyPart(gifBodyPart);
  
  //设置 邮件 的主体部分(multipart 对象中包含了文字和图片两部分)
  message.setContent(multipart);
  //保存邮件这一步骤不能少
  message.saveChanges();
  
  return message;
 }
 
 //根据 收件人地址,发送 E-mail 如果发送成功返回 true ,否则返回 false
 
 public boolean sendMessage(MailSend sender) {
  
  Properties props = new Properties();
  props.setProperty("mail.transport.protocol",MailSend.protocol);
  props.setProperty("mail.smtp.auth","true");
  props.setProperty("mail.host",sender.server);
  
  MyAuthenticator myAuthenticator = new MyAuthenticator();
  Session session = Session.getInstance(props,myAuthenticator);
  session.setDebug(true);
  try {
   MimeMessage message = sender.createMessage(session,sender);
   Transport transport = session.getTransport();
   transport.connect();
   transport.sendMessage(message,message.getRecipients(Message.RecipientType.TO));
   transport.close();
  }catch(Exception ex) {
   ex.printStackTrace();
   System.out.println("邮件发送失败!");
   return false;
  }
  return true;
 }
 
 
 //根据 发送方 e-mail 地址中的 @ 后面部分,获得 该 e-mail 地址所在的 smtp 服务器
 //目前这个方法没有调用,好象得到的 MX 用在以上程序中有些问题
 public static String getSmtpServer(String domain,String dnsServer) throws NamingException {
  
  Hashtable env = new Hashtable();
  env.put(Context.INITIAL_CONTEXT_FACTORY,
      "com.sun.jndi.dns.DnsContextFactory");
  env.put(Context.PROVIDER_URL,"dns:" + dnsServer);
  
  DirContext ctx = new InitialDirContext(env);
  Attributes attrsAll = ctx.getAttributes(domain);
  //Attributes attrsMx = ctx.getAttributes(domain,new String[]{"MX"});
  
  Attribute attrMx = attrsAll.get("MX");
  String firstValue = (String)attrMx.get();
  
  return (firstValue.substring(firstValue.indexOf(" ") + 1));
 }
 
}

针对上面的这个类文件,我有一个地方想请教大家一下,就是

private String server = "smtp.sina.com.cn";  这句话不就是发送人的E-mail所属于的那个邮件服务器的地址吗?那么为什么我调用 getSmtpServer("sina.com",null); 这个方法(此方法的作用是得到MX记录啊) 得到的值是 freemx4.sinamail.sina.com.cn. 然后用此值给 server  变量 后,发送时就发送不成功,这是为什么???这地方我不一定以后就用 sina  E-mail 去发邮件啊,也可能用 126 的,或 gmail 的,那么 server 的值又应给多少呢?或者从那里得到呢?请大家指教

分享到:
评论

相关推荐

    官方VB.NET的例子 send E-mail

    How-To Send Mail 怎样去发一个邮件 Vb.NET

    直接发送E-mail的单元

    前几天自己做程序时,因为该 程序不能有窗体,所以需要用代码发送E-mail的方法,在网上到处没找到,就自己用Sakmail加了个发送Email的单元,就一个方法,大家不要骂我传垃圾啊。 //邮箱服务器地址,用户名,用户密码...

    app-send-mail:CriandoAplicaçãoWeb para envio de E-mails com uso da lib

    ESTA仙道realizado USO德IMPORTACAO手册哒藏书como的备考德praticar,EAversão哒藏书PHPMailer的阙ESTA仙道USADAé一个V6.0.0,阙颇得SER encontrada褐: Como testar este projeto:(示例:usando o xampp )。 ...

    Node.jsAPI框架actionHero.js.zip

    actionHero.js 是一个款集成了集群性能和延迟任务的功能的多重传输的 API 服务器。...actionHero.js 服务器可以处理请求和任务(延迟 action 比如:send e-mail 或者是后台任务)。 标签:actionHero

    25个微软经典开源项目框架源码(一)

    Source Code for Project NMvp Framework ... To open the source included in the ...Any feedback please report to the project wiki, leave a message at the codeplex forums or send e-mail for heynemann@gmail.com

    php_smtp.rar_The Procedure

    一个用PHP写的用SMTP发送电子邮件的程序,有用着的兄弟可以下载.Using PHP to write a use SMTP to send e-mail procedure, useful with the brothers can be downloaded.

    Greenshot 1.2.10

    Export the screenshot in various ways: save to file, send to printer, copy to clipboard, attach to e-mail, send Office programs or upload to photo sites like Flickr or Picasa, and others.

    asp自动发送邮件系统(Jmail)

    感谢你使用 Emanuel-Jmail 自动发送邮件系统 本系统是利用Jmail组件自动发送邮件 注意: ...2.本系统使用一个默认的邮箱账号:autosend11@163.com 密码:autosend,请不要任意...4.如有问题请联系 E-mail:wxb200807@126.com

    PHP基础教程 是一个比较有价值的PHP新手教程!

    你可以在苍蝇上画图,编写程序下载或者显示e-mail。你甚至可以完成网络相关的功能。最好的是,你可以选择你的PHP安装版本需要哪些功能。引用Nissan的Xterra的话来说就是PHP可以做到你想让它做到的一切而且无所不能! ...

    入门学习Linux常用必会60个命令实例详解doc/txt

    hda1中的“1”代表hda的第一个硬盘分区 (partition),hda2代表hda的第二主分区,第一个逻辑分区从hda5开始,依此类推。此外,可以直接检查 /var/log/messages文件,在该文件中可以找到计算机开机后系统已辨认出来的...

    发送邮件发送,先提一下SMTP

    SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。 再简单介绍一下名称空间(NameSpace)System.Web.Mail类库里所提供的邮件...

    JIRA 从入门到精通.doc

    JIRA作为一个专业的问题跟踪系统可以帮助您把缺陷管理起来,让跟踪和管理在项目中发现的问题变得简单,而且充分利用JIRA的灵活配置和扩展性,可以将JIRA作为一个项目管理系统或者IT支持系统。 JIRA特性 1、 管理缺陷...

    ZigBee四种绑定方式在TI Z-Stack中的应用

    发送时使用的目标地址将由应用支持子层(APS)从绑定表中自动获得,从而能使消息顺利被目标节点的一个或多个应用服务,乃至分组接收。 Binding Table 1.Defined in RAM,but can be saved in Flash if the NV_...

    RoundCube Webmail 1.0.3

    它提供一个e-mail客户端应该具备的所有功能包括MIME支持,地址薄,文件夹操作,信息搜索和拼写检查。RoundCube Webmail采用PHP+Ajax开发并且需要MySQL数据库来存储数据。用户界面采用XHTML+CSS2设计。 RoundCube ...

    邮件发送代码

    获得一个Seesion对象 * 2.创建邮件对象(Message) * 3.发送邮件Transport * */ //1.获得连接 Properties props = new Properties();//认证信息 //authenticator 接口信息 Session session = ...

    windows下命令行发送邮件

    blat是一个基于命令行的、小巧免费的邮件发送程序 SMTP协议邮件发送程序 Blat is a Public Domain Windows console utility that sends the contents of a file in an e­mail message using the SMTP protocol. ...

    利用Java发送邮件(含附件)的例子

    //邮件发送时的一些配置信息的一个属性对象 private String sendUserName; //发件人的用户名 private String sendUserPass; //发件人密码 private Multipart mp;//附件添加的组件 private List files = new ...

    hyperfolio:InèsGuerrini的在线投资组合的源代码,去年是ECV Digital Nantes的网页设计专业的学生。 我的创意前端课程评估的一部分

    超级对开 的在线投资组合的源代码,去年是Web设计专业的学生。 先决条件 在您的机器上安装了npm ... ENFORMED_SEND_MAIL_TO=mail_that_will_receive_stuff ,将mail_that_will_receive_stuff替换为将接

    Visual C++ 编程资源大全(英文源码 网络)

    16.zip E-Mail file attachment using MIME 使用MINE实现邮件附带文件(10KB)&lt;END&gt;&lt;br&gt;94,17.zip A simple web browser using the IE4 components 使用IE4的组件完成一个简单的网页浏览器(4KB)&lt;END&gt;&lt;br&gt;...

    freemarker总结

    上面的语法格式中,sequence就是一个集合对象,也可以是一个表达式,但该表达式将返回一个集合对象,而item是一个任意的名字,就是被迭代输出的集合元素.此外,迭代集合对象时,还包含两个特殊的循环变量: item_index:...

Global site tag (gtag.js) - Google Analytics