`
hellojim
  • 浏览: 53324 次
  • 性别: 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 的值又应给多少呢?或者从那里得到呢?请大家指教

分享到:
评论

相关推荐

    C# Asp.net编写的 E-Mail发送程序

    在C#和Asp.net环境中编写一个E-Mail发送程序是一项常见的任务,这通常涉及到网络通信、SMTP(简单邮件传输协议)服务和邮件格式的理解。以下是该程序涉及的主要知识点: 1. **SMTP协议**:SMTP是互联网上用于发送...

    精彩编程与编程技巧-设计E-mail程序...

    通过上述步骤,我们可以使用Visual Basic 5结合MAPI技术来开发一个基本的E-mail程序。虽然这里只介绍了核心的部分,但在实际开发过程中还可能遇到其他问题,比如错误处理、性能优化等。不过掌握了这些基础知识后,就...

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

    在VB.NET中发送电子邮件是一个常见的任务,特别是在开发企业级应用或者需要自动化通信的场景下。以下是如何使用VB.NET实现SMTP(简单邮件传输协议)来发送邮件的详细步骤和相关知识点。 首先,我们需要引入`System...

    设计E-mail程序

    本篇文章将深入探讨如何使用Visual Basic (VB) 开发一个简单的E-mail客户端程序。该程序基于VB技术实现,并提供了实用的源代码,这在其他地方可能难以找到。 #### 二、开发环境与工具 为了实现这一目标,我们需要...

    php发送email程序,E-mail发送程序

    在处理发送状态时,如果`$mail-&gt;send()`返回`false`,则表示发送失败,可以通过`$mail-&gt;ErrorInfo`获取错误信息;如果返回`true`,则表示发送成功。 在实际开发中,为了确保邮件发送的可靠性,通常会添加错误捕获和...

    Send E-Mail from Your Web Applications

    本教程将深入探讨如何利用ASP.NET控件和源码来创建一个能够发送邮件的Web应用程序。 首先,了解基本的邮件发送原理。在ASP.NET中,我们主要使用SmtpClient类和MailMessage类。SmtpClient类负责与SMTP(简单邮件传输...

    SMTP(发送E-mail)

    在C++程序中,这些信息会被封装到一个结构体或类中,例如`CSmtp`可能有一个成员函数来设置这些字段。 2. **邮件体**:邮件体是邮件的实际内容,可以是纯文本或包含HTML格式。在VC 6.0的代码中,`Smtp.cpp`或`...

    发送普通文本格式的E-mail的java源码

    在Java编程环境中,发送普通文本格式的电子邮件是一个常见的任务,主要涉及到JavaMail API的使用。JavaMail API是一个开源库,允许开发者在Java应用程序中处理邮件的发送和接收。以下是一些关于如何使用Java发送普通...

    java实现E-mail邮件发送功能

    我们使用`getTransport()`获取一个`Transport`实例,然后调用`connect()`方法连接到SMTP服务器,`send()`方法发送邮件。 在实际应用中,还需要考虑错误处理和异常捕获,确保邮件发送的稳定性。此外,对于敏感信息如...

    jsp实例之E-mail

    总结来说,"jsp实例之E-mail"是一个关于使用JSP和JavaMail API在Web应用中实现邮件发送的实践案例。通过学习这个实例,开发者可以掌握如何配置邮件服务器参数、构建和发送邮件等核心技能,从而在实际项目中实现类似...

    用Java实现E-mail客户端.rar_java E-ma_java mail_java mail api_javamail_

    本项目“用Java实现E-mail客户端”就是一个基于JavaMail API的简单示例,旨在展示如何利用Java进行E-mail操作。 首先,JavaMail API提供了对SMTP(Simple Mail Transfer Protocol)和POP3(Post Office Protocol ...

    c#写的E-mail发送工具,源代码

    本项目是一个使用C#编写的E-mail发送工具,它对于初学者来说是一个很好的学习资源,可以帮助他们理解如何利用C#进行网络通信,特别是处理SMTP(Simple Mail Transfer Protocol)协议来发送电子邮件。 首先,我们要...

    E-MAIL PROGRAM. ALLOWS USER TO LOG INTO ISP SERVICE AND SEND

    标题中的"E-MAIL PROGRAM"指的是一个电子邮件程序,它允许用户登录ISP(Internet Service Provider,互联网服务提供商)的服务,以便发送邮件。在早期的互联网时代,这样的程序是常见的,因为并非所有用户都通过Web...

    PHP E-mail 注入:防止注入.md

    $mail-&gt;send(); echo "Message has been sent"; } catch (Exception $e) { echo "Message could not be sent. Mailer Error: {$mail-&gt;ErrorInfo}"; } } ?&gt; ``` 在这个示例中,我们使用了PHPMailer库来构建和...

    javascript经典特效---E-mail递交.rar

    E-mail递交.htm是一个HTML文件,它可能包含了表单元素,如文本框、按钮等,用于收集用户输入的信息。在HTML中,`&lt;form&gt;`标签用于定义一个表单,而`&lt;input&gt;`标签则用来创建输入字段,如电子邮件地址。通常,表单会有...

    基于QQ E-Mail的邮件发送实例

    本教程将深入探讨如何使用VB.NET编程语言创建一个基于QQ邮箱的邮件发送实例。QQ邮箱是中国最受欢迎的电子邮件服务之一,它提供了丰富的API接口供开发者使用。下面,我们将详细讲解如何在Windows 7环境下,利用Visual...

    C#开发的发送E-Mail源代码

    本文将详细解析如何使用C#编写...以上就是关于C#开发的发送E-Mail源代码的相关知识点。通过理解这些概念和代码示例,你应该能够创建一个功能完备的邮件发送程序。如果你在实践中遇到问题,欢迎通过邮件讨论,共同进步。

    直接发送E-mail的单元

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

    springboot-mail.zip

    在这个示例中,我们创建了一个`sendEmail`方法,接收收件人邮箱、主题和正文作为参数,使用`JavaMailSender`发送邮件。 为了实际使用这个服务,可以在控制器或者业务逻辑中调用`sendEmail`方法,例如: ```java @...

    C# E-mail处理

    以下是一个简单的C#示例: ```csharp using System.Web.Mail; MailMessage mail = new MailMessage(); mail.To = "me@mycompany.com"; mail.From = "you@yourcompany.com"; mail.Subject = "this is a test email....

Global site tag (gtag.js) - Google Analytics