`

JavaMail邮件发送-发送一个文本邮件和一些问题说明

    博客分类:
  • java
阅读更多
 

需要下载的JAR包:

JavaMail:http://www.oracle.com/technetwork/java/javamail/index.html 

JAF:http://www.oracle.com/technetwork/java/javase/downloads/index-135046.html 

加入的包有:mail.jar activation.jar

 

你要准备一个邮箱账户,就用网易的吧,然后打开SMTP功能

 

 

 

 

 

关于网易的一些端口信息参考下面:

 

 

 每个公司都是不一样的,使用SSL的和不实用的也不一样

 

 使用的开发和编译环境是JDK1.4,如果你使用的是JDK1.5环境,那么你的环境需要修改一些东西,找到 javaee.jar 删除里面的 mial 包,否则会有冲突

 

否则会报错:

Java代码 复制代码 收藏代码
  1. Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream   
  2.     at javax.mail.Session.loadProvidersFromStream(Session.java:928)   
  3.     at javax.mail.Session.access$000(Session.java:174)   
  4.     at javax.mail.Session$1.load(Session.java:870)   
  5.     at javax.mail.Session.loadResource(Session.java:1084)   
  6.     at javax.mail.Session.loadProviders(Session.java:889)   
  7.     at javax.mail.Session.<init>(Session.java:210)   
  8.     at javax.mail.Session.getInstance(Session.java:249)   
  9.     at com.mail.TextMail.main(TextMail.java:22)  
Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
	at javax.mail.Session.loadProvidersFromStream(Session.java:928)
	at javax.mail.Session.access$000(Session.java:174)
	at javax.mail.Session$1.load(Session.java:870)
	at javax.mail.Session.loadResource(Session.java:1084)
	at javax.mail.Session.loadProviders(Session.java:889)
	at javax.mail.Session.<init>(Session.java:210)
	at javax.mail.Session.getInstance(Session.java:249)
	at com.mail.TextMail.main(TextMail.java:22)

 

 下面我直接贴代码了

Java代码 复制代码 收藏代码
  1. package com.mail;   
  2. import java.util.Date;   
  3. import java.util.Properties;   
  4. import javax.mail.Message;   
  5. import javax.mail.Session;   
  6. import javax.mail.Transport;   
  7. import javax.mail.internet.InternetAddress;   
  8. import javax.mail.internet.MimeMessage;   
  9. import javax.mail.internet.MimeUtility;   
  10. // 如果你使用JDK1.4以上运行 会出现 Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream   
  11. // 需要你找到 javaee.jar 删掉 里面的 mail 包   
  12. public class TextMail {   
  13.     public static void main(String[] args) throws Exception {   
  14.         // 配置文件对象   
  15.         Properties props = new Properties();   
  16.         // 邮箱服务地址   
  17.         props.put( "mail.smtp.host ""smtp.163.com ");        
  18.         // 是否进行验证   
  19.         props.put("mail.smtp.auth""true");   
  20.         // 创建一个会话   
  21.         Session session = Session.getInstance(props);   
  22.         // 打开调试,会打印与邮箱服务器回话的内容   
  23.         session.setDebug(true);   
  24.         Message message = new MimeMessage(session);   
  25.         // 如果发送人没有写对,那么会出现 javamail 550 Invalid User   
  26.         // 如果发送人写的和使用的帐号不一致,则会出现 553 Mail from must equal authorized user   
  27.         InternetAddress from = new InternetAddress("test20120711120200@163.com");   
  28.         from.setPersonal(MimeUtility.encodeText("java小强<test20120711120200@163.com>"));   
  29.         message.setFrom(from);   
  30.         InternetAddress to = new InternetAddress("455213313@qq.com");   
  31.         message.setRecipient(Message.RecipientType.TO, to);   
  32.         message.setSubject(MimeUtility.encodeText("强哥邀请,谁敢不从!"));   
  33.         message.setText("强哥邀请你访问我的博客:http://cuisuqiang.iteye.com/!");   
  34.         message.setSentDate(new Date());   
  35.         Transport transport = session.getTransport("smtp");   
  36.         // 具体你使用邮箱的smtp地址和端口,应该到邮箱里面查看,如果使用了SSL,网易的端口应该是 465/994   
  37.         transport.connect("smtp.163.com"25"test20120711120200""test123456");   
  38.         transport.sendMessage(message, message.getAllRecipients());   
  39.         transport.close();   
  40.         System.out.println("发送完毕");   
  41.     }   
  42. }  
package com.mail;
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeUtility;
// 如果你使用JDK1.4以上运行 会出现 Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream
// 需要你找到 javaee.jar 删掉 里面的 mail 包
public class TextMail {
	public static void main(String[] args) throws Exception {
		// 配置文件对象
		Properties props = new Properties();
		// 邮箱服务地址
		props.put( "mail.smtp.host ", "smtp.163.com ");		
		// 是否进行验证
		props.put("mail.smtp.auth", "true");
		// 创建一个会话
		Session session = Session.getInstance(props);
		// 打开调试,会打印与邮箱服务器回话的内容
		session.setDebug(true);
		Message message = new MimeMessage(session);
		// 如果发送人没有写对,那么会出现 javamail 550 Invalid User
		// 如果发送人写的和使用的帐号不一致,则会出现 553 Mail from must equal authorized user
		InternetAddress from = new InternetAddress("test20120711120200@163.com");
		from.setPersonal(MimeUtility.encodeText("java小强<test20120711120200@163.com>"));
		message.setFrom(from);
		InternetAddress to = new InternetAddress("455213313@qq.com");
		message.setRecipient(Message.RecipientType.TO, to);
		message.setSubject(MimeUtility.encodeText("强哥邀请,谁敢不从!"));
		message.setText("强哥邀请你访问我的博客:http://cuisuqiang.iteye.com/!");
		message.setSentDate(new Date());
		Transport transport = session.getTransport("smtp");
		// 具体你使用邮箱的smtp地址和端口,应该到邮箱里面查看,如果使用了SSL,网易的端口应该是 465/994
		transport.connect("smtp.163.com", 25, "test20120711120200", "test123456");
		transport.sendMessage(message, message.getAllRecipients());
		transport.close();
		System.out.println("发送完毕");
	}
}

 

需要注意的有

Java代码 复制代码 收藏代码
  1. InternetAddress from = new InternetAddress("test20120711120200@163.com");  
InternetAddress from = new InternetAddress("test20120711120200@163.com");

 

Java代码 复制代码 收藏代码
  1. transport.connect("smtp.163.com"25"test20120711120200""test123456");  
transport.connect("smtp.163.com", 25, "test20120711120200", "test123456");

 

这两个邮箱的地址必须相同,否则会出现

Java代码 复制代码 收藏代码
  1. Exception in thread "main" javax.mail.MessagingException: 553 Mail from must equal authorized user   
  2.   
  3.     at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:1020)   
  4.     at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:716)   
  5.     at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:388)   
  6.     at com.mail.TextMail.main(TextMail.java:38)  
Exception in thread "main" javax.mail.MessagingException: 553 Mail from must equal authorized user

	at com.sun.mail.smtp.SMTPTransport.issueCommand(SMTPTransport.java:1020)
	at com.sun.mail.smtp.SMTPTransport.mailFrom(SMTPTransport.java:716)
	at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:388)
	at com.mail.TextMail.main(TextMail.java:38)

 

你上网查都是说用户验证不对,其实一般大家都是按照别人代码拷贝的,然后修改了用户和密码,怎么会不对!

我这个账户和密码都是可以用的,对不起网易了!

 

由于上面我设置了打印调试,所以你在控制台会看到如下内容:

Java代码 复制代码 收藏代码
  1. DEBUG: setDebug: JavaMail version 1.3.1  
  2. DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]   
  3. DEBUG SMTP: useEhlo true, useAuth true  
  4. DEBUG SMTP: trying to connect to host "smtp.163.com", port 25  
  5.   
  6. 220 163.com Anti-spam GT for Coremail System (163com[20111010])   
  7. DEBUG SMTP: connected to host "smtp.163.com", port: 25  
  8.   
  9. EHLO cuisuqiang   
  10. 250-mail   
  11. 250-PIPELINING   
  12. 250-AUTH LOGIN PLAIN   
  13. 250-AUTH=LOGIN PLAIN   
  14. 250-coremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UrgdNesUCa0xDrUUUUj   
  15. 250-STARTTLS   
  16. 250 8BITMIME   
  17. DEBUG SMTP: Found extension "PIPELINING", arg ""  
  18. DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"  
  19. DEBUG SMTP: Found extension "AUTH=LOGIN", arg "PLAIN"  
  20. DEBUG SMTP: Found extension "coremail", arg "1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UrgdNesUCa0xDrUUUUj"  
  21. DEBUG SMTP: Found extension "STARTTLS", arg ""  
  22. DEBUG SMTP: Found extension "8BITMIME", arg ""  
  23. DEBUG SMTP: Attempt to authenticate   
  24. AUTH LOGIN   
  25. 334 dXNlcm5hbWU6   
  26. dGVzdDIwMTIwNzExMTIwMjAw   
  27. 334 UGFzc3dvcmQ6   
  28. dGVzdDEyMzQ1Ng==   
  29. 235 Authentication successful   
  30. DEBUG SMTP: use8bit false  
  31. MAIL FROM:<test20120711120200@163.com>   
  32. 250 Mail OK   
  33. RCPT TO:<455213313@qq.com>   
  34. 250 Mail OK   
  35. DEBUG SMTP: Verified Addresses   
  36. DEBUG SMTP:   455213313@qq.com   
  37. DATA   
  38. 354 End data with <CR><LF>.<CR><LF>   
  39. Message-ID: <14518194.1341995865564.JavaMail.Administrator@cuisuqiang>   
  40. Date: Wed, 11 Jul 2012 16:37:45 +0800 (CST)   
  41. From: "=?GBK?Q?java=D0=A1=C7=BF<test20120711120200@163.com>?=" <test20120711120200@163.com>   
  42. To: 455213313@qq.com   
  43. Subject: =?GBK?B?x7+459H7x+ujrMutuNKyu7TTo6E=?=   
  44. Mime-Version: 1.0  
  45. Content-Type: text/plain; charset=GBK   
  46. Content-Transfer-Encoding: quoted-printable   
  47.   
  48. =C7=BF=B8=E7=D1=FB=C7=EB=C4=E3=B7=C3=CE=CA=CE=D2=B5=C4=B2=A9=BF=CD=A3=BAhtt=   
  49. p://cuisuqiang.iteye.com/=A3=A1   
  50. .   
  51. 250 Mail OK queued as smtp2,DNGowEB52UhcO_1PZmMMCA--.937S2 1341995868  
  52. QUIT  
DEBUG: setDebug: JavaMail version 1.3.1
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
DEBUG SMTP: trying to connect to host "smtp.163.com", port 25

220 163.com Anti-spam GT for Coremail System (163com[20111010])
DEBUG SMTP: connected to host "smtp.163.com", port: 25

EHLO cuisuqiang
250-mail
250-PIPELINING
250-AUTH LOGIN PLAIN
250-AUTH=LOGIN PLAIN
250-coremail 1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UrgdNesUCa0xDrUUUUj
250-STARTTLS
250 8BITMIME
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Found extension "AUTH=LOGIN", arg "PLAIN"
DEBUG SMTP: Found extension "coremail", arg "1Uxr2xKj7kG0xkI17xGrU7I0s8FY2U3Uj8Cz28x1UUUUU7Ic2I0Y2UrgdNesUCa0xDrUUUUj"
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Attempt to authenticate
AUTH LOGIN
334 dXNlcm5hbWU6
dGVzdDIwMTIwNzExMTIwMjAw
334 UGFzc3dvcmQ6
dGVzdDEyMzQ1Ng==
235 Authentication successful
DEBUG SMTP: use8bit false
MAIL FROM:<test20120711120200@163.com>
250 Mail OK
RCPT TO:<455213313@qq.com>
250 Mail OK
DEBUG SMTP: Verified Addresses
DEBUG SMTP:   455213313@qq.com
DATA
354 End data with <CR><LF>.<CR><LF>
Message-ID: <14518194.1341995865564.JavaMail.Administrator@cuisuqiang>
Date: Wed, 11 Jul 2012 16:37:45 +0800 (CST)
From: "=?GBK?Q?java=D0=A1=C7=BF<test20120711120200@163.com>?=" <test20120711120200@163.com>
To: 455213313@qq.com
Subject: =?GBK?B?x7+459H7x+ujrMutuNKyu7TTo6E=?=
Mime-Version: 1.0
Content-Type: text/plain; charset=GBK
Content-Transfer-Encoding: quoted-printable

=C7=BF=B8=E7=D1=FB=C7=EB=C4=E3=B7=C3=CE=CA=CE=D2=B5=C4=B2=A9=BF=CD=A3=BAhtt=
p://cuisuqiang.iteye.com/=A3=A1
.
250 Mail OK queued as smtp2,DNGowEB52UhcO_1PZmMMCA--.937S2 1341995868
QUIT

 

这些都是程序与邮件服务商的一些交互信息!

 

 

 

最后:

由于近期大量小网站在未经同意情况下使用文章,现将我的博客地址公布如下,请您到ITEYE网站看原创,谢谢!

http://cuisuqiang.iteye.com/ !

分享到:
评论

相关推荐

    javamail入门1--发送简单的文本邮件

    这个简单的示例演示了如何使用 JavaMail 发送文本邮件。对于更复杂的邮件,如包含 HTML 内容、附件或嵌入图片,你可以扩展 `MimeMessage`,使用 `MimeBodyPart` 和 `Multipart` 类来构建复杂的邮件结构。 总的来说...

    JavaMail邮件发送-能发送附件和带背景音乐的邮件的小系统

    JavaMail邮件发送是一个常见的开发需求,它允许程序员通过编程方式发送包含文本、附件甚至多媒体内容的电子邮件。在Java中,JavaMail API提供了这样的功能,它是一个开源库,用于处理SMTP(简单邮件传输协议)、POP3...

    JavaMail邮件发送-为你的邮件增加背景音乐和背景图片.doc

    首先,JavaMail API 是Java平台上的一个库,它允许开发者通过SMTP(简单邮件传输协议)或其他邮件传输协议发送电子邮件。在JavaMail中,我们通常使用`MimeMessage`类来创建邮件对象,`Multipart`类来组合不同的邮件...

    JavaMail发送邮件(文本、html、附件)

    3. **发送文本邮件** - 创建`MimeMessage`实例,并设置发件人、收件人、主题和正文。 - 示例代码: ```java MimeMessage message = new MimeMessage(session); message.setFrom(new InternetAddress("from@...

    javamail-1.4.4-邮件发送组件

    JavaMail 是一个开源的 Java API,它为 Java 程序员提供了处理电子邮件的功能,包括发送、接收和管理邮件。这个“javamail-1.4.4”版本是 JavaMail 的一个稳定版本,提供了丰富的功能和改进,适用于各种邮件系统。在...

    常规JavaMail 邮件发送实用类

    "常规JavaMail 邮件发送实用类"标题所指的,通常是一个自定义的Java类,封装了JavaMail API的基本操作,使得邮件发送变得更加简单和便捷。这类实用类一般包含配置SMTP服务器、设置邮件内容、添加附件等功能。 ...

    用javamail实现邮件发送-完整源码-之前的那个资源变成50分一次下载了,所以重新上传一个,让大家能下载

    要实现JavaMail的邮件发送功能,你需要了解以下几个关键组件: 1. `Session`:邮件会话对象,它是整个邮件操作的核心,负责配置SMTP服务器信息,如主机名、端口、用户名和密码。 2. `Message`:代表一封邮件,你...

    javamail 邮件发送支持带有图片的html格式和普通文本格式

    JavaMail API 是一个广泛使用的 Java 库,用于发送和接收电子邮件。它提供了丰富的功能来处理不同类型的邮件内容,包括纯文本、HTML 格式以及包含图片在内的富媒体邮件。在实际应用中,开发人员常常需要将这些格式...

    javamail&commons-email

    Apache Commons Email是Apache软件基金会的一个子项目,它简化了JavaMail API的使用,提供了一个更简洁的接口来创建和发送邮件。Commons Email库的核心类是`Email`,它允许开发者构建邮件,添加附件,设置抄送和密送...

    用javamail实现邮件发送-完整源码

    这个压缩包中的资源可能包括了实现这一功能所需的全部源代码,让你能够直接在自己的项目中集成邮件发送功能,无需额外付费。 JavaMail API 提供了丰富的类和接口,用于处理邮件服务器的交互,如 SMTP(简单邮件传输...

    javamail邮件发送工具类

    以上就是基于JavaMail邮件发送工具类的一些核心概念和使用方法。在实际开发中,还需要根据具体需求进行错误处理、多线程发送、邮件模板等功能的扩展。通过这些类的封装,可以使得邮件发送的代码更加简洁、易于维护。

    JavaMail邮件发送源码 非常简单

    2. **获取Session对象**:使用`Properties`对象创建一个`Session`实例,它是邮件会话的容器,可以存储邮件发送的配置信息。 3. **创建Message对象**:通过`Session`对象创建一个`Message`实例,这代表了你要发送的...

    JavaMail邮件发送Deom

    JavaMail邮件发送Demo是Java开发中用于实现电子邮件发送的一个实例,它依赖于两个关键的库:activation.jar和mail.jar。这两个库提供了JavaMail API,使得Java开发者能够方便地与各种邮件服务器进行交互,完成邮件的...

    javamail邮件发送源码

    JavaMail邮件发送源码是Java开发中用于发送电子邮件的一个库,它提供了丰富的API来处理SMTP、POP3和IMAP等邮件协议。这个简单的javamail实例表明,开发者已经成功地测试了邮件发送功能,确保其在实际应用中可以正常...

    javamail邮件群发、单发_邮件发送

    JavaMail 是一个强大的开源库,用于在 Java 应用程序中处理电子邮件的发送和接收。它提供了丰富的 API,使得开发者可以方便地实现邮件的发送、接收、管理等操作。在这个主题中,我们将深入探讨如何使用 JavaMail ...

    用javaMail发送邮件

    JavaMail 是一个强大的开源库,用于在Java应用程序中发送和接收电子邮件。这个功能通常涉及到SMTP(简单邮件传输协议)和其他相关的互联网邮件协议。在JavaMail中,`mail.jar` 和 `activation.jar` 是两个关键的库...

    javamail发送邮件.zip

    JavaMail 是一个强大的开源库,用于在Java应用程序中发送和接收电子邮件。这个“javamail发送邮件.zip”压缩包显然包含了一个示例项目,演示如何使用JavaMail API发送包含正文文本、图片以及附件的邮件。以下是对这...

    Gmail邮件通过JavaMail发送(不带附件与带一个附件)

    使用设置好的属性创建一个`Session`对象,这个对象将被用来创建`Transport`实例,用于实际的邮件发送。 ```java Session session = Session.getInstance(props, new Authenticator() { protected ...

    javamail发送邮件小程序,类以及写好,只要放包,下载一个就可以

    JavaMail 是一个开源的 Java 库,用于在 Java 应用程序中实现电子邮件的发送和接收。这个小程序可能包含了一套完整的类,可以帮助开发者快速构建邮件发送功能,无需从头开始编写所有必需的代码。 JavaMail 提供了对...

    james和javamail实现邮件收发(带发送附件)

    在IT行业中,电子邮件的收发是一项基础且重要的功能,尤其对于开发者来说,了解如何通过编程方式实现邮件的发送和接收是非常必要的。在这个例子中,我们将深入探讨如何利用James服务器和JavaMail API来实现这一目标...

Global site tag (gtag.js) - Google Analytics