关于Java中的JavaMail问题

作者&投稿:豆卢哀 (若有异议请与网页底部的电邮联系)
请教关于javamail的问题~

在项目里,后台代码:transport = session.getTransport("smtp");报异常:
javax.mail.NoSuchProviderException: Unable to locate provider for protocol: smtp
调试到:session = Session.getInstance(props, null);这一步,返回的session实例里 properties 的值是空的.
我试过Properties props = new Properties();和Properties props = System.getProperties();
和session = Session.getInstance(props, null);改成session = Session.getDefaultInstance(props, null);

如果你是发送邮件程序是通过sina邮件服务器向sohu邮件服务器发送邮件的话,用户发送邮件协议smtp,用户取邮件协议pop3/imap。邮件发送到sina服务器,使用到smtp协议,当邮件到sina服务器后,sina服务器把邮件发送给sohu邮件服务器,也是通过smtp协议,当用户通过sohu服务器查看邮件,使用pop3访问器。看你的情况,发邮件不涉及pop3协议。以你的情况建议您下载一些发送邮件的源码,对照看下是否是代码逻辑编写错误!! 这都只是我的肤浅看法,也可能不十分正确! 希望指正!

给你个例子吧
/**
* @author EX-QINCIDONG001
* 验证
*/
public class MailAuthorization extends Authenticator {
private String username;
private String password;

public MailAuthorization(String username,String password) {
this.username = username;
this.password = password;
}

@Override
protected PasswordAuthentication getPasswordAuthentication() {
// TODO Auto-generated method stub
return new PasswordAuthentication(username,password);
}

}
public class MailInfo {
// 服务器地址
private String hostName;
// 端口
private String hostPort;
// 用户名
private String userName;
private String password;
public String getUserName() {
return this.userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return this.password;
}
public void setPassword(String password) {
this.password = password;
}
// 是否需要验证
private boolean validate = false;
// 发件人
private String sender;
// 收件人
private String[] recvers = {};
// 抄送给哪些人
private String[] ccs = {};
// 邮件主题
private String subject;
// 邮件内容
private String content;
// 附件
private List<File> attaches;
public String getHostName() {
return this.hostName;
}
public void setHostName(String hostName) {
this.hostName = hostName;
}
public String getHostPort() {
return this.hostPort;
}
public void setHostPort(String hostPort) {
this.hostPort = hostPort;
}
public boolean isValidate() {
return this.validate;
}
public void setValidate(boolean validate) {
this.validate = validate;
}
public String getSender() {
return this.sender;
}
public void setSender(String sender) {
this.sender = sender;
}

public String[] getRecvers() {
return this.recvers;
}
public void setRecvers(String[] recvers) {
this.recvers = recvers;
}

public String[] getCcs() {
return this.ccs;
}
public void setCcs(String[] ccs) {
this.ccs = ccs;
}
public String getSubject() {
return this.subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return this.content;
}
public void setContent(String content) {
this.content = content;
}
public List<File> getAttaches() {
return this.attaches;
}
public void setAttaches(List<File> attaches) {
this.attaches = attaches;
}

}

public class MailSender {
private MailInfo mailInfo;

public MailSender(MailInfo mailInfo) {
this.mailInfo = mailInfo;
}

// 发送邮件方法
public void sendMail() throws MessagingException {
Properties props = System.getProperties();
props.setProperty("mail.transport.protocol", "smtp"); // smtp协议
props.put("mail.smtp.host", mailInfo.getHostName());
props.put("mail.smtp.port", mailInfo.getHostPort());
props.put("mail.smtp.auth", mailInfo.isValidate()?"true":"false");

Authenticator authenticator = new MailAuthorization(mailInfo.getUserName(),mailInfo.getPassword());
Session session = Session.getDefaultInstance(props, authenticator);

MimeMessage msg = new MimeMessage(session);
msg.setSubject(mailInfo.getSubject(), "utf-8");
Address address = new InternetAddress(mailInfo.getSender());
msg.setFrom(address);

// 收信人
Address[] recvs = new Address[mailInfo.getRecvers().length];
int index = 0;

if (mailInfo.getRecvers() != null) {
for (String s : mailInfo.getRecvers()) {
Address addr = new InternetAddress(s);
recvs[index] = addr;
index++;
}
}
msg.setRecipients(RecipientType.TO,recvs);
index = 0;

// 抄送
Address[] ccs = new Address[mailInfo.getCcs().length];
if (mailInfo.getCcs() != null) {
for (String s:mailInfo.getCcs()) {
Address addr = new InternetAddress(s);
ccs[index] = addr;
index++;
}
}

msg.setRecipients(RecipientType.CC, ccs);

Multipart mp = new MimeMultipart();
BodyPart part = new MimeBodyPart();
part.setContent(mailInfo.getContent(), "text/html;charset=utf-8");
// 增加附件
if (mailInfo.getAttaches() != null && mailInfo.getAttaches().size() > 0) { // 有附件
for (int i=0;i<mailInfo.getAttaches().size();i++) {
BodyPart bp = new MimeBodyPart();
FileDataSource fds = new FileDataSource((File) mailInfo.getAttaches().get(i));
bp.setDataHandler(new DataHandler(fds));
mp.addBodyPart(bp);
}
}
mp.addBodyPart(part);
msg.setContent(mp);

// Transport transport = session.getTransport();
Transport.send(msg);
}
}

public class TestMailSender {
/**
* @param args
*/
public static void main(String[] args) {
MailInfo mi = new MailInfo();
mi.setValidate(true);
mi.setUserName("ex-qincidong001@pingan.com.cn");
mi.setPassword("*******");
mi.setSubject("测试邮件发送");
mi.setSender("qincidong@163.com");
mi.setRecvers(new String[]{"ex-qincidong001@pingan.com.cn","qincidong@qq.com"});
mi.setHostPort("25");
mi.setHostName("smtp.163.com");
mi.setContent("<a href='www.baidu.com'>百度</a>百度知道");
// 添加附件
List<File> attaches = new ArrayList<File>();
attaches.add(new File("D:\\qincidong\\资料\\Ejb\\EJB3.0入门经典-weblogic.pdf"));
attaches.add(new File("D:\\qincidong\\资料\\Ejb\\编写第一个EJB应用程序.doc"));
mi.setAttaches(attaches);

MailSender sender = new MailSender(mi);
try {
sender.sendMail();
System.out.println("邮件发送成功。");
} catch (MessagingException e) {
System.err.println("邮件发送失败");
e.printStackTrace();
}
}

}

你是用户名或密码给错了吧AuthenticationFailedException这是认证错误啊

有联系方式吗?回去试一下,连接一下QQ信箱,
我一般常用的是163。


为什么说JA V A不仅是编程程语言而且是一个平台?
它最大限度的利用了网络,Java小应用程序可在网络上传输而不受计算机和操作系统的限制。JAVA 同时还是一个运行在其它硬件平台之上的纯软件平台。Java平台由Java虚拟机(JVM)和Java 应用程序接口(API)两部分组成,它们把Java程序从硬件依赖中分离出来。JVM是Java平台的基础,它发挥抽象计算机的作用,在应用...

SCJP认证学什么
SCJP认证主要学Ja语言,以及学Ja语言的应用,可以通过thinking in JAVA、Core Ja 2 Volume I、JAVA学习笔记等书来学习JAVA语言,再通过JAVA认证考试指南这本书来学习SCJP。一、SCJP的介绍 SCJP是Ja程序员认证,是一种Ja认证考试。SCJP主要是测验Ja程序设计概念及能力,内容偏向于Ja语法以及JDK的内容;二...

Java认证学历要求
大专生能够进行ja认证的考试嘛?会不会有学历要求? 本文章来回答你。ja认证是没有学历要求的,可以去所在地的考试中心进行ja认证的报名,报名后会发一个考试号,只需要在规定时间内到进行考试就可以了。

《我的世界》Ja
然而,在基岩版中,溺尸的掉落列表中确实包括三叉戟,且被标记为稀有掉落。这就意味着,如果你在基岩版中,无论击杀何种溺尸都有可能掉落三叉戟,而在Java版中,获得三叉戟主要依赖于在海洋中狩猎。基岩版与Java版之间的技术差距,部分玩家认为达到了两个时代的跨度。一些原本基于两个版本共有的特性发展...

Java中的宏变量
java中 final 有修饰符的变量称为常量,名称一般用大写。s1==s2是因为“ja”和“va”都是常量,jvm会自动计算出结果,然后在常量池里查找,找到就把地址引用过去。用 final 修饰了str 后原理也是一样的了。

怎样提高Java技能的方法?
编程,说容易就容易,说难就难。没有认真坚持学学不会的,也没有三天打鱼两天晒网成大神的。无论学习什么技能,都要塌下心来认真对待,认真学习。Ja也是一样的,下面北大青鸟分享提高Ja技能方法。一定要看书 现在网上有非常多的视频教程,还有很多专业的Ja培训班,使我们更容易学习Ja。然而想要深入学习...

java开发需要学习什么 做Ja开发都需要学什么
首先是java的基础javase java的框架;spring+struts2+hibernate 然后就是前端也要懂一些,比如javascript,jquery,html,css

在Java中,与数据库连接的技术是( )。
【答案】:B 开放数据库连接(ODBC,Open Datebase Connectivity),它是用C语言定义的。由于J2EE要求与Ja—va绑定,因此规定使用Java数据库连接(JDBC,Java Data Base Connectivity),作为Java与数据库连接的技术。

在ja么?
Servlet的本质在于,它是一种运行在服务器内部的Java程序,专为构建动态Web页面而设计。其最大的优势在于其平台无关性和独立于HTTP协议的特性,使得它能够在服务器与客户端之间起到关键的中介作用。不同于传统的Java应用,Servlet不是从命令行启动,而是由Web服务器内部的Java虚拟机自动加载和管理。这意味...

java中.JMenubar 菜单栏不显示..
\/\/OK import javax.swing.*;import java.awt.*;import java.awt.event.*;public class can1 extends JFrame{ public can1(){ j1=new JMenuBar();this.setJMenuBar(j1);ja1=new JMenu("文件(F)");ja2=new JMenu("编辑(E)");ja3=new JMenu("视图(U)");ja4=new JMenu("搜索(S)...

集安市18542939689: java中如何实现公司邮箱发送邮件配置 -
晏陆益肾: Java中可以通过Javamail API实现公司邮箱邮件发送配置,Java mail是利用现有的邮箱账户发送邮件的工具,具体步骤如如下:1、通过JavamailAPI设置发送者邮箱用户名及密码2、通过JavamailAPI设置邮件主题、邮件内容、附件及邮件发送时间3、通过JavamailAPI设置发送者邮箱地址及接收者邮箱地址,接收者地址可以是多个及抄送4、邮件的需基本元素都设置完毕后,即可通过Javamail API的发送接口执行发送操作.

集安市18542939689: 用java写收发邮件的程序,求助,在线 -
晏陆益肾: 界面自己写一下就可以了,把相关的参数传进去就可以了. 这个是我以前写的.用的javamail. 有main方法,测试一下自己的邮件,应该没问题的.希望可以帮到你.注意导入你需要的javamail.jar的包 ------------------------------------------------------------...

集安市18542939689: 求知识:java发邮件能不能不输入用户名和密码 -
晏陆益肾: 要发送邮件就要用到java中的JavaMail,关于JavaMailAPI的详解呢在 (http://blog.csdn.net/imain/article/details/1453677“)中有非常详尽的介绍;用户名和密码写入代码中即可.

集安市18542939689: java邮件中验证的解释 -
晏陆益肾: JAVAMAIL结合邮件服务的时候 用的 Properties props = System.getProperties();// 创建Properties 对象 // 添加smtp服务器属性 props.put("mail.smtp.host", host); props.put("mail.smtp.auth", "true"); // 需要验证 props.put("mail.transport....

集安市18542939689: Java的核心技术是什么? -
晏陆益肾: J2EE中JDBC, JNDI, EJBS, RMI, JSP, JAVA SERVLETS, XML, JMS, JAVA IDL, JTS, JTA, JAVAMAIL 和 JAF这13种是J2EE的核心技术.说白了所有的都是配合WEB开发和面向对象.至于J2SE中理解面向对象、熟悉类、用好逻辑就可以.

集安市18542939689: 关于javamail发送邮件的回执 -
晏陆益肾: 如果是指检验邮箱是否存在的话,没必要去发送邮件,当然如果发送邮件的话也是可以检验出来的,如果邮箱不存在的话,发送是失败的;更简单一点直接用javaMail中的connect去判定是否存在就可以了:// 根据邮件会话属性和密码验证器构造...

集安市18542939689: Java怎么直接发送邮件,而不通过页面或者outlook软件. -
晏陆益肾: 1 必须编写邮件客户端程序,请使用javamail包2 编写一个页面,触发一个事件,讲发送的内容传递给后台的邮件客户端程序,即可完成你的要求3 你不会是要求我们替你写个程序吧???祝你好运!

集安市18542939689: java 发送邮件 需要哪些jar包 -
晏陆益肾: 使用JavaMail发送邮件需要用到mail.jar和activtion.jar两个包.

集安市18542939689: java开发outlook -
晏陆益肾: 用java来连接邮件服务器,这个和outlook无关,官方工具是JavaMail,可以在oracle官网上下载相关jar包和说明文档,第三方常见的工具是jmail,jmail是历史悠久的服务器端收发邮件的工具.网上样例和资料都很多.至于过滤内容JavaMail应该有提供按发件人或内容下载邮件的api.

集安市18542939689: javamail发送邮件错误 java.io.FileNotFoundException: Source -
晏陆益肾: C:\Program Files\Java\jdk1.6.0_05\jre\lib\javamail.providers 要自己引用import javax.mail.*; import javax.mail.internet...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网