@红薯:http://www.oschina.net/code/snippet_12_160,我使用这里的方法 发送邮件失败。
邮箱服务器安装的是:exchange2010
我使用jbex-javamail.jar,jbex-v1.4.6-eval.jar,jcifs-1.3.15.jar,加上mail.jar.可以发送简单邮件,代码如下:
public static void main(String[] argv) throws NoSuchProviderException, MessagingException { // Set here the Exchange server's hostname and login username/password: String hostname = "host"; String username = "账号"; String password = "密码"; sendMessage(hostname, username, password); }
private static void sendMessage(String hostname, String username, String password) throws NoSuchProviderException, MessagingException { // Create a session Session session = Session.getDefaultInstance(new Properties());
// Create and connect to the transport Transport transport = session.getTransport("jbexTransport"); transport.connect(hostname, username, password);
// Recipients Address[] recipients = new Address[] {new InternetAddress("zlczhou@yeah.net")}; // Create a message Message msg = new MimeMessage(session); msg.setRecipients(Message.RecipientType.TO, recipients); msg.setSubject("Test message"); msg.setContent("Hello from JavaMail by jbex.jar", "text/plain"); msg.saveChanges(); // Send the message transport.sendMessage(msg, recipients);
// Disconnect transport.close(); }
但是 使用上边的方法 改写您原来写的MailSender.java如下:
/**=========================================== * Copyright (C) 2012 Tempus * All rights reserved * * 项 目 名: myjmail * 文 件 名: MailSender.java * 版本信息: V1.0.0 * 作 者: admin * 日 期: 2012-8-29-上午09:19:13 * ============================================*/ package com.tempus.common.utils; /** * 类 名 称: MailSender * 类 描 述: * 创 建 人: admin * 创建时间: 2012-8-29 上午09:19:13 * * 修 改 人: admin * 操作时间: 2012-8-29 上午09:19:13 * 操作原因: * */ /** * 邮件发送组件类 * 该类需要三个jar文件: mail.jar,activation.jar,htmlparser.jar * @version 1.0 */ import java.io.UnsupportedEncodingException; import java.util.Date; import java.util.Properties; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; import javax.mail.Address; import javax.mail.Authenticator; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.NoSuchProviderException; import javax.mail.PasswordAuthentication; import javax.mail.SendFailedException; 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.log4j.Logger; import sun.misc.BASE64Encoder; /** * 邮件发送组件,具体的使用方法参照该类的main方法 * @author Winter Lau */ public abstract class MailSender extends Authenticator{ private static Logger logger = Logger.getLogger(MailSender.class); private String username = null; //邮件发送帐号用户名 private String userpasswd = null; //邮件发送帐号用户口令 protected BodyPart messageBodyPart = null; protected Multipart multipart = new MimeMultipart("related"); protected Message mailMessage = null; protected Session mailSession = null; protected Properties mailProperties = System.getProperties(); protected Transport transport = null; protected InternetAddress mailFromAddress = null; protected Address[] mailToAddressTo = null; protected Address[] mailToAddressCc = null; protected Address[] mailToAddressBcc = null; protected Authenticator authenticator = null; protected String mailSubject = ""; protected Date mailSendDate = null; // protected ExchangeMail mail = null; protected MailSender(){} /** * 构造函数 * @param smtpHost * @param username * @param password */ protected MailSender(String smtpHost, String username, String password) { this.username = username; this.userpasswd = password; final String uname = username; final String upass = password; mailProperties.put("mail.smtp.host", smtpHost); mailProperties.put("mail.smtp.auth", "true"); //设置smtp认证,很关键的一句 mailProperties.put("mail.smtp.port", "25"); mailSession = Session.getDefaultInstance(mailProperties,new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(uname, upass); } }); try { this.transport = mailSession.getTransport("jbexTransport"); } catch (NoSuchProviderException e) { e.printStackTrace(); } mailMessage = new MimeMessage(mailSession); messageBodyPart = new MimeBodyPart(); } /** * 构造一个纯文本邮件发送实例 * @param smtpHost * @param username * @param password * @return */ public static MailSender getTextMailSender(String smtpHost, String username, String password) { return new MailSender(smtpHost,username,password) { public void setMailContent(String mailContent) throws MessagingException { messageBodyPart.setText(mailContent); multipart.addBodyPart(messageBodyPart); } }; } /** * 用于实现邮件发送用户验证 * @see javax.mail.Authenticator#getPasswordAuthentication */ protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication(username, userpasswd); } /** * 设置邮件标题 * @param mailSubject * @throws MessagingException */ public void setSubject(String mailSubject) throws MessagingException { this.mailSubject = mailSubject; mailMessage.setSubject(mailSubject); } /** * 所有子类都需要实现的抽象方法,为了支持不同的邮件类型 * @param mailContent * @throws MessagingException */ protected abstract void setMailContent(String mailContent) throws MessagingException; /** * 设置邮件发送日期 * @param sendDate * @throws MessagingException */ public void setSendDate(Date sendDate) throws MessagingException { this.mailSendDate = sendDate; mailMessage.setSentDate(sendDate); } /** * 设置发件人地址 * @param mailFrom * @throws MessagingException */ public void setMailFrom(String mailFrom) throws MessagingException { mailFromAddress = new InternetAddress(mailFrom); mailMessage.setFrom(mailFromAddress); } // /** // * 设置收件人地址,收件人类型为to,cc,bcc(大小写不限) // * @param mailTo 邮件接收者地址 // * @param mailType 值为to,cc,bcc // * @author Liudong // */ // public void setMailTo(String[] mailTo, String mailType) throws Exception { // for (int i = 0; i < mailTo.length; i++) { // mailToAddress = new InternetAddress(mailTo[i]); // if (mailType.equalsIgnoreCase("to")) { // mailMessage.addRecipient(Message.RecipientType.TO,mailToAddress); // } else if (mailType.equalsIgnoreCase("cc")) { // mailMessage.addRecipient(Message.RecipientType.CC,mailToAddress); // } else if (mailType.equalsIgnoreCase("bcc")) { // mailMessage.addRecipient(Message.RecipientType.BCC,mailToAddress); // } else { // throw new Exception("Unknown mailType: " + mailType + "!"); // } // } // } /** * 设置邮件发送附件 * @param attachmentName * @throws MessagingException * @throws UnsupportedEncodingException */ public void setAttachments(String attachmentName) throws MessagingException, UnsupportedEncodingException { DataSource source = null; try { source = new FileDataSource(attachmentName); } catch (Exception e) { logger.error("没有找到"+attachmentName+e.getMessage()); } messageBodyPart = new MimeBodyPart(); messageBodyPart.setDataHandler(new DataHandler(source)); String encoding = System.getProperty("sun.jnu.encoding");//获取系统的默认编码方式 BASE64Encoder enc = new BASE64Encoder();//该类位于jre/lib/rt.jar中 messageBodyPart.setFileName("=?"+encoding+"?B?"+enc.encode((source.getName()).getBytes())+"?="); multipart.addBodyPart(messageBodyPart); } // /** // * 开始发送邮件 // * @throws MessagingException // * @throws SendFailedException // */ // public void sendMail() throws MessagingException, SendFailedException { // if (mailToAddress == null) // throw new MessagingException("请你必须你填写收件人地址!"); // mailMessage.setContent(multipart); // Transport.send(mailMessage); // } /** * 设置收件人地址,收件人类型为to,cc,bcc(大小写不限) * @param mailTo 邮件接收者地址 * @param mailType 值为to,cc,bcc * @author Liudong */ public void setMailTo(String[] mailTo, String mailType) throws Exception { if (mailType.equalsIgnoreCase("to")) { mailToAddressTo = new Address[mailTo.length]; for (int i = 0; i < mailTo.length; i++) { mailToAddressTo[i] = new InternetAddress(mailTo[i]); } mailMessage.setRecipients(Message.RecipientType.TO,mailToAddressTo); } else if (mailType.equalsIgnoreCase("cc")) { mailToAddressCc = new Address[mailTo.length]; for (int i = 0; i < mailTo.length; i++) { mailToAddressCc[i] = new InternetAddress(mailTo[i]); } mailMessage.setRecipients(Message.RecipientType.CC,mailToAddressCc); } else if (mailType.equalsIgnoreCase("bcc")) { mailToAddressBcc = new Address[mailTo.length]; for (int i = 0; i < mailTo.length; i++) { mailToAddressBcc[i] = new InternetAddress(mailTo[i]); } mailMessage.setRecipients(Message.RecipientType.BCC,mailToAddressBcc); } else { throw new Exception("Unknown mailType: " + mailType + "!"); } } /** * 开始发送邮件 * @throws MessagingException * @throws SendFailedException * @throws ExchangeServiceException */ @SuppressWarnings("static-access") public void sendMail() throws MessagingException{ if (mailToAddressTo == null) throw new MessagingException("请你你填写收件人地址!"); mailMessage.setContent(multipart); // Transport.send(mailMessage); transport.connect(mailProperties.getProperty("mail.smtp.host"), username, userpasswd); transport.send(mailMessage, mailToAddressTo); transport.close(); } }
报错:用于提交此请求的用户帐户无权代表指定的发送帐户发送邮件。
可是查看了下 账号的最大权限都开了。为什么还提示错误呢?
MailUtis.java
public class MailUtils extends MailSender { /** * 新的实例: MailUtils. * */ public MailUtils(){} public MailUtils(String smtpHost,String username,String password){ super(smtpHost, username, password); } /** * 发送邮件 */ @Override public void setMailContent(String mailContent) throws MessagingException { messageBodyPart.setText(mailContent); multipart.addBodyPart(messageBodyPart); } }
调用方式:
MailUtils sendmail = new MailUtils(mailHost, mailUser, mailPassword);
请问是什么原因呢?
publicstaticvoidmain(String[]argv)throwsNoSuchProviderException,MessagingException
{
//SetheretheExchangeserver'shostnameandloginusername/password:
Stringhostname="host";
Stringusername="账号";
Stringpassword="密码";
sendMessage(hostname,username,password);
}
privatestaticvoidsendMessage(Stringhostname,Stringusername,Stringpassword)throwsNoSuchProviderException,MessagingException
{
//Createasession
Sessionsession=Session.getDefaultInstance(newProperties());
//Createandconnecttothetransport
Transporttransport=session.getTransport("jbexTransport");
transport.connect(hostname,username,password);
//Recipients
Address[]recipients=newAddress[]{newInternetAddress(zlczhou@yeah.net)};
//Createamessage
Messagemsg=newMimeMessage(session);
msg.setRecipients(Message.RecipientType.TO,recipients);
msg.setSubject("Testmessage");
msg.setContent("HellofromJavaMailbyjbex.jar","text/plain");
msg.saveChanges();
//Sendthemessage
transport.sendMessage(msg,recipients);
//Disconnect
transport.close();
}
这种方式发送没问题了,具体什么原因,以后有时间在看看
<spanstyle="background-color:#b7e8bd;">没有人吗?
<aclass='referer'target='_blank'>@红薯一下,你就知道将原来红薯的代码改为第一个示例的那样,就可以发送邮件了。但是还是不太清楚,当邮件服务器为exchange2010后为什么红薯那个发邮件的代码就不行了呢!!!??-.-报什么错//
-.-报什么错//
Exceptioninthread"main"javax.mail.MessagingException:com.moyosoft.exchange.ExchangeServiceException:HTTPerror:404-NotFound;
什么情况啊?亲
<divclass="ref">
privatestaticvoidsendMessage(Stringhostname,Stringusername,Stringpassword)throwsNoSuchProviderException,MessagingException
{
//Createasession
Sessionsession=Session.getDefaultInstance(newProperties());
//Createandconnecttothetransport
Transporttransport=session.getTransport("jbexTransport");
transport.connect(hostname,username,password);
//Recipients
Address[]recipients=newAddress[]{newInternetAddress(zlczhou@yeah.net)};
//Createamessage
Messagemsg=newMimeMessage(session);
msg.setRecipients(Message.RecipientType.TO,recipients);
msg.setSubject("Testmessage");
msg.setContent("HellofromJavaMailbyjbex.jar","text/plain");
msg.saveChanges();
//Sendthemessage
transport.sendMessage(msg,recipients);
//Disconnect
transport.close();
}
这种方式发送没问题了,具体什么原因,以后有时间在看看
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。