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

在java应用程序中加入发送邮件的功能

阅读更多
javaMai 为建立邮件和消息服务提供了框架,因而应用程序可以发送和接收邮件.JavaMail API 是一个用于阅读、编写和发送电子消息的可选包(标准扩展),可以用来建立基于标准的电子邮件客户机,它配置了各种因特网邮件协,包括SMTP 、POP 、IMAP和 MIME ,还包括相关的NNTP 、S/MIME 及其它协议。
   通常开发JavaMail 程序通常需要mail.jar 和 activation.jar 两个架包。mail.jar包含mailapi.jar、pop3.jar 和 smtp.jar。mailapi.jar包含核心的API 类, pop3.jar 和 smtp.jar为各自的邮件协议包含实现方法. activation.jar处理 MIME (多用途因特网邮件扩展)类型。

   核心JavaMail API 由七个类组成:Session 、Message 、Address 、Authenticator 、Transport 、Store 及 Folder ,它们都来自javax.mail 、即JavaMail API 顶级包。可以用这些类完成大量常见的电子邮件任务,包括发送消息、检索消息、删除消息、认证、回复消息、转发消息、管理附件、处理基于HTML文件格式的消息以及搜索或过滤邮件列表。
这里只具体说明一下发送邮件的JavaMail类:
1.Session
  这个Session类代表JavaMail 中的一个邮件session. 每一个基于 JavaMail的应用程序至少有一个session但是可以有任意多的session。
     在这个例子中, Session对象需要知道用来处理邮件的SMTP 服务器。JavaMail需要Properties来创建一个session对象
  Session sendMailSession;
    Properties props = new Properties ();
  props.put("mail.smtp.host", "smtp.sina.com.cn");//可以换上你的smtp主机名。
  sendMailSession = Session.getInstance(props, null);
2.Transport
  Transport 是用来发送信息的.
  用法:Transport transport;
  transport = sendMailSession.getTransport("smtp");
  用JavaMail Session对象的getTransport 方法来初始化Transport。传过去的字符串申明了对象所要使用的协议,如"smtp"。这是因为JavaMail以境内置了很多协议的实现方法。
  注意: JavaMail并不是绝对支持每一个协议,目前支持IMAP、 SMTP和 POP3。
3.Message
  Message对象将存储我们实际发送的电子邮件信息,Message对象被作为一个MimeMessage对象来创建并且需要知道应当选择哪一个JavaMail session。
  使用方法:Message newMessage = new MimeMessage(sendMailSession);
4.MimeMessage
    实现Message接口,以显示Mime风格的消息
5.InternetAddress
    存储电子邮件中关于“from”、“to”域的信息


用JavaMail发送电子邮件的过程比较简单,大致分为以下5个步骤:
1.创建Properties 对象,设置邮件服务器属性:mail.smtp.host ,即指定你的SMTP服务器。
2.建立一个邮件会话
3.创建你的邮件信息对象,该对象包含了你的邮件的全部内容,包括发送人,接受人,标题,正文,附件等内容
4.完成发送前的服务器验证
5.发送邮件



以下是代码,在这里发送人和接收人都是用的新浪邮箱,没有加入发送附件的功能
package test;
import java.io.*;
import java.text.*;
import java.util.*;
port javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.*;

public class SimpleSender {
 
 public static void main(String args[]) {
  try {
   String smtpServer = "smtp.sina.com.cn";
   String to = "test1@sina.com.cn";
   String from = "test2@sina.com.cn";
   String subject = "hello";
   String body = "";
   send(smtpServer, to, from, subject, body);
  } catch (Exception ex) {
   System.out.println("Usage: java test.SimpleSender"
     + " smtpServer toAddress fromAddress subjectText bodyText");
  }

 }

 public static void send(String smtpServer, String to, String from,
   String subject, String body) {
  try {
    Properties props = System.getProperties();
    props.put("mail.smtp.host", smtpServer);
    props.put("mail.smtp.auth","true");  
    Authenticator  sa = new SmtpAuth(from, "");
           Session session = Session.getDefaultInstance(props,sa);
           InternetAddress     fromadress   =   new   InternetAddress(from);  
           javax.mail.internet.InternetAddress   toadress=   new   javax.mail.internet.InternetAddress   (to);  
           javax.mail.internet.MimeMessage     mymessage   =   new   javax.mail.internet.MimeMessage   (session);  
           mymessage.setFrom(fromadress);  
           mymessage.setRecipient(Message.RecipientType.TO   ,toadress);  
           mymessage.setSentDate(new   java.util.Date());  
           mymessage.addHeader("header","test")   ;  
           mymessage.setSubject(subject)   ;  
           mymessage.setText("hello")   ;  
           Transport   tt=session.getTransport("smtp");  
           tt.send(mymessage);  
  } catch (Exception ex) {
   System.out.println(ex.toString());
  }
  
 }
}  
分享到:
评论
3 楼 mfcai 2008-10-12  
gmail smtp服务器地址:smtp.gmail.com
发件人邮箱:test@gmail.com
收件人邮箱:test@sina.com.cn
以下代码测试通过,能正常发邮件
import java.security.Security;
import java.util.Date;
import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;


public class GmailSender {
	public static void main(String[] args) throws AddressException, MessagingException {
		  Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
		  final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
		  // Get a Properties object
		  Properties props = System.getProperties();
		  props.setProperty("mail.smtp.host", "smtp.gmail.com");
		  props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
		  props.setProperty("mail.smtp.socketFactory.fallback", "false");
		  props.setProperty("mail.smtp.port", "465");
		  props.setProperty("mail.smtp.socketFactory.port", "465");
		  props.put("mail.smtp.auth", "true");
		  final String username = "test";
		  final String password = "test";
		  Session session = Session.getDefaultInstance(props, new Authenticator(){
		      protected PasswordAuthentication getPasswordAuthentication() {
		          return new PasswordAuthentication(username, password);
		      }});

		       // -- Create a new message --
		  Message msg = new MimeMessage(session);

		  // -- Set the FROM and TO fields --
		  msg.setFrom(new InternetAddress(username + "@gmail.com"));
		  msg.setRecipients(Message.RecipientType.TO, 
		    InternetAddress.parse("test@sina.com.cn",false));
		  msg.setSubject("Hello");
		  msg.setText("How are you");
		  msg.setSentDate(new Date());
		  Transport.send(msg);
		  
		  System.out.println("Message sent.");
		 }


}
2 楼 mfcai 2008-10-12  
toeo 写道

我没有用sina的邮箱测试..我用126的邮箱测试是不可以的.. 如果要是公司自己的邮件服务器是肯定可以的. 公司没有搭建的话.我是用的gmail的邮件..上面还有安全验证. 这样的main函数的没有跑通..使用的spring的邮件集成的.配置如下:


Xml代码

  
<!-- our Authenticator implementation toeomail#gmail-->  
    <bean id="smtpAuthenticator"  
        class="com.XXXX.SmtpAuthenticator">  
        <constructor-arg value="XXXXXl@gmail.com" />  
        <constructor-arg value="XXXXXXX" />  
    </bean>  
  
    <!-- now setup an authenticated session -->  
    <bean id="mailSession" class="javax.mail.Session"  
        factory-method="getInstance">  
        <constructor-arg>  
            <props>  
                <prop key="mail.smtp.auth">true</prop>  
                <prop key="mail.smtp.socketFactory.port">465</prop>  
                <prop key="mail.smtp.socketFactory.class">  
                    javax.net.ssl.SSLSocketFactory   
                </prop>  
                <prop key="mail.smtp.socketFactory.fallback">  
                    false   
                </prop>  
            </props>  
        </constructor-arg>  
        <constructor-arg ref="smtpAuthenticator" />  
    </bean>  
  
    <!-- and configure the MailSender with the authenticated session -->  
    <bean id="mailSender"  
        class="org.springframework.mail.javamail.JavaMailSenderImpl">  
        <property name="host" value="smtp.gmail.com" />  
        <property name="session" ref="mailSession" />  
    </bean>  
  
    <!-- this is a template message that we can pre-load with default state -->  
    <bean id="templateMessage"  
        class="org.springframework.mail.SimpleMailMessage">  
        <property name="from" value="XXXXX@gmail.com" />  
        <property name="subject" value="Testing" />  
    </bean>  
  
    <bean id="sendMailService"  
        class="com.XXXXX.SendMailService">  
        <constructor-arg ref="mailSender" />  
        <constructor-arg ref="templateMessage" />  
    </bean>  
<!-- our Authenticator implementation toeomail#gmail-->
<bean id="smtpAuthenticator"
class="com.XXXX.SmtpAuthenticator">
<constructor-arg value="XXXXXl@gmail.com" />
<constructor-arg value="XXXXXXX" />
</bean>

<!-- now setup an authenticated session -->
<bean id="mailSession" class="javax.mail.Session"
factory-method="getInstance">
<constructor-arg>
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.socketFactory.port">465</prop>
<prop key="mail.smtp.socketFactory.class">
javax.net.ssl.SSLSocketFactory
</prop>
<prop key="mail.smtp.socketFactory.fallback">
false
</prop>
</props>
</constructor-arg>
<constructor-arg ref="smtpAuthenticator" />
</bean>

<!-- and configure the MailSender with the authenticated session -->
<bean id="mailSender"
class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.gmail.com" />
<property name="session" ref="mailSession" />
</bean>

<!-- this is a template message that we can pre-load with default state -->
<bean id="templateMessage"
class="org.springframework.mail.SimpleMailMessage">
<property name="from" value="XXXXX@gmail.com" />
<property name="subject" value="Testing" />
</bean>

<bean id="sendMailService"
class="com.XXXXX.SendMailService">
<constructor-arg ref="mailSender" />
<constructor-arg ref="templateMessage" />
</bean>

参考的gmail配置 网上有相应的文章  gmail的spring的配置.. 除了普通的登录还有一个ssl登录..而且..你要是用这个邮箱发送邮件的时候过一阵子就发不了了.. gmail就会给你的邮件上面添加验证码..还要自己再次手动登录.激活邮箱... 这种公共的邮箱应该就是有这样的限制吧..自己的邮箱用着方便些...

Gmail与其他邮箱不同的是Gmail提供的POP3和SMTP是使用安全套接字层SSL的,因此上述编码的程序是无法收发邮件的
1 楼 toeo 2008-10-12  
我没有用sina的邮箱测试..我用126的邮箱测试是不可以的..

如果要是公司自己的邮件服务器是肯定可以的.

公司没有搭建的话.我是用的gmail的邮件..上面还有安全验证.

这样的main函数的没有跑通..使用的spring的邮件集成的.配置如下:


<!-- our Authenticator implementation toeomail#gmail-->
	<bean id="smtpAuthenticator"
		class="com.XXXX.SmtpAuthenticator">
		<constructor-arg value="XXXXXl@gmail.com" />
		<constructor-arg value="XXXXXXX" />
	</bean>

	<!-- now setup an authenticated session -->
	<bean id="mailSession" class="javax.mail.Session"
		factory-method="getInstance">
		<constructor-arg>
			<props>
				<prop key="mail.smtp.auth">true</prop>
				<prop key="mail.smtp.socketFactory.port">465</prop>
				<prop key="mail.smtp.socketFactory.class">
					javax.net.ssl.SSLSocketFactory
				</prop>
				<prop key="mail.smtp.socketFactory.fallback">
					false
				</prop>
			</props>
		</constructor-arg>
		<constructor-arg ref="smtpAuthenticator" />
	</bean>

	<!-- and configure the MailSender with the authenticated session -->
	<bean id="mailSender"
		class="org.springframework.mail.javamail.JavaMailSenderImpl">
		<property name="host" value="smtp.gmail.com" />
		<property name="session" ref="mailSession" />
	</bean>

	<!-- this is a template message that we can pre-load with default state -->
	<bean id="templateMessage"
		class="org.springframework.mail.SimpleMailMessage">
		<property name="from" value="XXXXX@gmail.com" />
		<property name="subject" value="Testing" />
	</bean>

	<bean id="sendMailService"
		class="com.XXXXX.SendMailService">
		<constructor-arg ref="mailSender" />
		<constructor-arg ref="templateMessage" />
	</bean>



参考的gmail配置 网上有相应的文章  gmail的spring的配置..

除了普通的登录还有一个ssl登录..而且..你要是用这个邮箱发送邮件的时候过一阵子就发不了了..
gmail就会给你的邮件上面添加验证码..还要自己再次手动登录.激活邮箱...

这种公共的邮箱应该就是有这样的限制吧..自己的邮箱用着方便些...

相关推荐

    java实现发送邮件功能源码+jar

    如果需要发送带附件的邮件,可以使用`Multipart`类,将文本和附件一起添加到邮件中。`MimeBodyPart`类用于创建包含数据的邮件部分,然后将其添加到`Multipart`对象中。 10. **异常处理**: 在实际使用中,应确保...

    java发送电子邮件

    `activation.jar`包含了JAF的实现,它提供了对MIME类型的支持,使Java应用程序能够识别和操作电子邮件中的各种数据格式。`mail.jar`则是JavaMail API的核心库,提供了发送和接收电子邮件的接口及实现。 在Java中...

    Java基于JDK1.6基础上Spring2.5.6版本上发送邮件功能需要的依赖lib.zip

    在Java编程环境中,实现邮件发送功能是一项常见的任务,特别是在企业级应用中,如Spring框架2.5.6版本。为了在JDK1.6的基础上利用Spring...通过理解这些概念和步骤,开发者可以轻松地实现在Java应用中发送邮件的功能。

    java mail发邮件

    总的来说,Java Mail是一个强大的工具,它使得在Java应用中集成邮件功能变得简单。通过理解和使用提供的jar文件和示例代码,开发者能够轻松实现邮件服务的功能,无论是发送文本邮件还是带有附件的复杂邮件。

    发送邮件及邮件附件java代码实例

    本文将深入分析一个Java程序示例——`Mail.java`,它通过Socket编程实现邮件发送功能,并支持添加附件。 #### 二、类设计与功能概述 `Mail.java` 类的设计遵循了面向对象的原则,提供了发送邮件以及添加附件的方法...

    java发送邮件必备的包

    在Java编程语言中,发送电子邮件是一项常见的任务,尤其在自动化通知、系统日志报告或用户交互等场景下。为了实现这个功能,开发者通常需要引入特定的库或包。标题提到的"java发送邮件必备的包",指的是JavaMail API...

    java源码包---java 源码 大量 实例

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java源码...

    java 发送邮件 所需jar包

    Java发送邮件是开发过程中常见的需求,特别是在自动化任务、通知服务或者数据报告中。要实现这一功能,你需要一些特定的库,这些库以JAR...有了这些库,你可以轻松地在Java应用程序中实现复杂且可靠的邮件发送功能。

    java发送邮件依赖包javax.mail.jar和activation.jar.zip

    在发送邮件时,JAF可以解析和创建复杂的MIME结构,使得Java程序能够处理各种类型的附件,如文本、图片、音频、视频等。 为了使用这两个库,你需要在项目中添加对应的依赖。如果是传统的Java项目,你可以将这两个....

    发邮件所需的jar包下载

    JavaMail 是一个开源的Java库,它允许开发者在Java应用程序中发送电子邮件。在Java中处理邮件功能时,通常需要依赖一些特定的库,其中最常用的就是`mail.jar`和`activation.jar`。这两个JAR文件提供了JavaMail API,...

    邮件发送和定时发送邮件所需的jar包

    2. **mail-1.6.0.jar**:这是JavaMail API的一个实现,用于在Java应用程序中发送和接收电子邮件。JavaMail API提供了一系列接口和类,可以用来连接邮件服务器,创建邮件,包括文本、HTML、附件等不同格式的内容,...

    采用java的javax.mail发送 mail

    Java的javax.mail API是用于在Java应用程序中发送和接收电子邮件的标准库。这个API提供了一种与邮件服务器交互的抽象方式,使得开发者无需关心具体的邮件协议(如SMTP、POP3或IMAP)。在Java中,使用javax.mail库...

    Servlet发送邮件所需要的jar包

    这样,当Web应用被容器(如Tomcat、Jetty等)加载时,容器会自动扫描`lib`目录下的所有jar包,并将它们加入到应用的类路径中,从而使得Servlet可以正确地使用JavaMail API。 为了确保邮件发送功能的正常工作,还...

    java源码包3

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java...

    java源码包2

     Java 3DMenu 界面源码,有人说用到游戏中不错,其实平时我信编写Java应用程序时候也能用到吧,不一定非要局限于游戏吧,RES、SRC资源都有,都在压缩包内。 Java zip压缩包查看程序源码 1个目标文件 摘要:Java...

    邮件发送jar

    在发送邮件时,JAF可以帮助识别和处理邮件中的不同内容类型,比如文本、图片、音频或视频等复杂附件。有了JAF,开发者可以更加灵活地处理不同类型的邮件内容。 在提供的压缩包文件中,有两个关键的jar文件:mail....

    JAVA6.0的新特性

    `SystemTray`类同样是在JDK 6中新增的,它允许Java应用在系统托盘(也称为系统通知区域)中创建图标,以此提供持续的通知或快捷访问应用功能的能力。通过`SystemTray.getSystemTray()`获取`SystemTray`实例,再结合`...

    用Java做邮件服务器.doc

    这不仅可以帮助您更好地理解Java在网络编程中的应用,而且还可以作为构建更复杂邮件系统的起点。随着项目的深入,您还可以考虑增加更多的功能,比如邮件过滤、垃圾邮件检测等高级功能。此外,为了提高安全性,您还...

    基于Maven的javax.mail发送邮件例子程序

    下面例子演示怎样用javamail来发送邮件,在测试之前,我们要下载javamail的类包,并添加入你的工程中,如果你的IDE自带javamail的类包,那就很简单,直接import 就行,mark使用的是MyEclipse 7.5,自带,所以可以...

Global site tag (gtag.js) - Google Analytics