先上代码:
JavaUtil是我写的一个工具类,getSession()方法用于得到一个配置好了的session;getMessage()方法用于得到一个已经生成好了的MimeMessage类。 public static void main(String[] args) throws Exception {
Session session = JavaUtil.getSession();
MimeMessage msg = JavaUtil.getMessage(session); Transport tra = session.getTransport();
tra.connect(server,25,user,pas);
tra.sendMessage(msg, msg.getRecipients(Message.RecipientType.TO));
tra.close();
}这段简单的代码总是抛出异常Exception in thread "main" javax.mail.NoSuchProviderException: No provider for smtp;我已经把网上的方法都试过了。网上有很多解决方案说是因为配置环境中有多个地方存在mail.jar包导致这个问题,但是我已经把电脑中所有的mail.jar包都删掉了,只留下桌面上有,然后再导入到Eclipse中,结果还是这样。
JavaUtil是我写的一个工具类,getSession()方法用于得到一个配置好了的session;getMessage()方法用于得到一个已经生成好了的MimeMessage类。 public static void main(String[] args) throws Exception {
Session session = JavaUtil.getSession();
MimeMessage msg = JavaUtil.getMessage(session); Transport tra = session.getTransport();
tra.connect(server,25,user,pas);
tra.sendMessage(msg, msg.getRecipients(Message.RecipientType.TO));
tra.close();
}这段简单的代码总是抛出异常Exception in thread "main" javax.mail.NoSuchProviderException: No provider for smtp;我已经把网上的方法都试过了。网上有很多解决方案说是因为配置环境中有多个地方存在mail.jar包导致这个问题,但是我已经把电脑中所有的mail.jar包都删掉了,只留下桌面上有,然后再导入到Eclipse中,结果还是这样。
import java.util.Properties;
import java.util.Vector;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;public class Mail { private static final String to = "[email protected]";
private static final String from = "[email protected]";
private static final String host = "smtp.163.com";
private static String filename = "";
private static final String subject = "JavaMail测试2";
private static final String username = "";
private static final String password = "";
// 用于保存发送附件的文件名的集合
private static Vector<String> file = new Vector<String>();
private static final Log log = LogFactory.getLog(Mail.class); public static void main(String[] args) {
// 创建Properties对象
Properties props = System.getProperties();
// 创建信件服务器
props.put("mail.smtp.host", host);
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.user", username);
props.put("mail.smtp.password", password); // 添加附件
file.addElement("C:\\Documents and Settings\\Administrator\\桌面\\phone.txt");
file.addElement("C:\\Documents and Settings\\Administrator\\桌面\\everyday.txt"); // 得到默认的对话对象
Session session = Session.getDefaultInstance(props, null);
try {
// 创建一个消息,并初始化该消息的各项元素
MimeMessage msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
InternetAddress[] address = { new InternetAddress(to) };
msg.setRecipients(Message.RecipientType.TO, address); msg.setSubject(subject);
String content = "<font color='red'>这是一份 Java Mail 测试邮件</font>";
msg.setText(content, "utf-8", "html");
// 后面的BodyPart将加入到此处创建的Multipart中
Multipart mp = new MimeMultipart();
// 利用枚举器方便的遍历集合
Enumeration<String> efile = file.elements();
// 检查序列中是否还有更多的对象
while (efile.hasMoreElements()) {
MimeBodyPart mbp = new MimeBodyPart();
// 选择出每一个附件名
filename = efile.nextElement().toString();
// 得到数据源
FileDataSource fds = new FileDataSource(filename);
// 得到附件本身并至入BodyPart
mbp.setDataHandler(new DataHandler(fds));
// 得到文件名同样至入BodyPart
mbp.setFileName(fds.getName());
mp.addBodyPart(mbp);
}
// 移走集合中的所有元素
file.removeAllElements();
// Multipart加入到信件
msg.setContent(mp); // 发送信件
Transport transport = session.getTransport("smtp");
transport.connect(host, username, password);
transport.sendMessage(msg, msg
.getRecipients(Message.RecipientType.TO));
transport.close();
System.out.println("发送成功");
} catch (MessagingException mex) {
mex.printStackTrace();
Exception ex = null;
if ((ex = mex.getNextException()) != null) {
ex.printStackTrace();
}
System.out.println("发送失败");
}
}
}
第一条就是了。要学会先搜,再问
感谢你的回答,不过Google我还真是找了很久,那篇文章谈到的问题和我的问题并不是一样的。。所以参考价值并不是非常大,问题到现在也没有解决。
我感觉不是jar包的问题,但是不知道smtp是应该如何配置呢?求详解
你好!我在网上是找到了一些有关于两个jar包互相冲突的情况,但是我用的是eclipse,所以不知道这个问题具体应该怎么解决呢?
不是包的问题吗,而是你的smtp服务器没设好。
去检查一下smtp的设置。如果你要用163邮箱给别人发邮件的话,你必须设置smtp为:smtp.163.com。同理的,用gmail的邮箱发送的话就要用gmial的smtp服务器了。
你好!我的服务器地址是写在配置文件里的,mail.host = smtp.sina.com.cn,这样应该是没有错的吧?
还是抛一样的异常,下面是配置文件的内容:
mail.transport.protocol = smtp;
mail.smtp.auth = true;
mail.host = smtp.sina.com;
p.put("mail.smtp.auth", "true");
p.put("mail.transport.protocol", "smtp");
p.put("mail.smtp.host", "smtp.126.com");//设置smtp,自己Google一下,一大堆
p.put("mail.smtp.port", "25"); Session mailsession = Session.getInstance(p); MimeMessage msg = new MimeMessage(mailsession); try {
msg.setFrom(new InternetAddress(mailFrom));
msg.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(mailTo));
msg.setSentDate(new Date());
msg.setSubject(mailSubject); //设置邮件内容,作为Multipart对象的一部分
MimeBodyPart mbp = new MimeBodyPart();
mbp.setText(mailMessage);
Multipart mulp = new MimeMultipart();
mulp.addBodyPart(mbp);
//设置附件,作为Multipart对象的一部分
mbp = new MimeBodyPart();
DataSource source = new FileDataSource(file);
mbp.setDataHandler(new DataHandler(source));
//解决附件乱码
mbp.setFileName(MimeUtility.encodeWord(fileName,"UTF-8",null));
mulp.addBodyPart(mbp);
//设置信息内容,将Multipart 对象加入信息中
msg.setContent(mulp); Transport tran = mailsession.getTransport("smtp");
tran.connect("smtp.126.com", "你自己的发送方用户名", "密码");
tran.sendMessage(msg, msg.getAllRecipients()); msg.writeTo(System.out);
out.println("邮件已经发送到<br>" + mailTo); } catch (Exception e) {
e.printStackTrace();
}