javamail发送邮件报javax.mail.AuthenticationFailedException错误!

 

 需要这两个jar包的支持,下面是一个完整可用的代码,至于我为什么报这个错误的原因,就是因为输入的是qq密码,而不是邮箱独立密码,也提醒其余同学,若碰到此问题,请仔细验证自己的账号密码,以及格式问题

package com.yc.mail;

import java.util.Date;
import java.util.Vector;

public class Mail {
	private String title; // 主题
	private String inceptAddress; // 收件人地址
	private String sendAddress; // 发件人地址
	private String content; // 邮件正文
	private Vector file; // 附件
	private Date sendTime; // 发送时间

	public Mail() {
		title = "";
		inceptAddress = "";
		sendAddress = "";
		content = "";
		file = new Vector();
	}

	public String getContent() {
		return content;
	}

	public void setContent(String content) {
		this.content = content;
	}

	public Vector getFile() {
		return file;
	}

	public void setFile(Vector file) {
		this.file = file;
	}

	public String getInceptAddress() {
		return inceptAddress;
	}

	public void setInceptAddress(String inceptAddress) {
		this.inceptAddress = inceptAddress;
	}

	public String getSendAddress() {
		return sendAddress;
	}

	public void setSendAddress(String sendAddress) {
		this.sendAddress = sendAddress;
	}

	public Date getSendTime() {
		return sendTime;
	}

	public void setSendTime(Date sendTime) {
		this.sendTime = sendTime;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	// 该方法用于收集附件名
	public void attachfile(String fname) {
		file.addElement(fname);
	}

}

 

package com.yc.mail;

import java.util.Properties;

import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeUtility;
import javax.mail.Multipart;
import javax.mail.internet.MimeMultipart;
import javax.mail.MessagingException;
import javax.activation.FileDataSource;
import javax.activation.DataHandler;
import java.util.Vector;
import java.util.Enumeration;
import java.util.Date;

public class MailFacade {
	private static String SMTPServer;
	private static String strUser;
	private static String strPwd;
	private static BodyPart mbp;
	private static String Centent;

	public MailFacade() {
		SMTPServer = "smtp.qq.com";
		strUser = "";   //输入发送方的 qq号  例如"449301818"
		strPwd = "";    //独立密码!!  
	}

	/**
	 * 发送邮件方法 接收一个Mail对象(封装邮件)
	 */
	public boolean startSend(Mail mail) throws Exception {
		// 创建Properties对象
		Properties props = System.getProperties();

		// 创建信件服务器

		props.put("mail.smtp.host", SMTPServer);
		props.put("mail.smtp.auth", "true");// 执行SMTP验证

		
		
		
		
		MyAuthenticator auth = new MyAuthenticator(strUser,strPwd);

		// 得到默认的对话对象
		Session session = Session.getDefaultInstance(props, auth);
		try {
			// 创建一个消息,并初始化该消息的各项元素
			MimeMessage msg = new MimeMessage(session);

			// 发送人地址
			msg.setFrom(new InternetAddress(mail.getSendAddress()));

			// 收件人地址
			InternetAddress[] address = { new InternetAddress(mail
					.getInceptAddress()) };

			msg.setRecipients(Message.RecipientType.TO, address);

			// 设置主题
			msg.setSubject(mail.getTitle().trim());

			// 后面的BodyPart将加入到此处创建的Multipart中
			Multipart mp = new MimeMultipart();

			// 邮件正文
			BodyPart mbpText = new MimeBodyPart();
			mbpText.setContent(mp, mail.getContent());

			// 利用枚举器方便的遍历集合
			Enumeration efile = mail.getFile().elements();

			// 检查序列中是否还有更多的对象
			String filename = "";
			while (efile.hasMoreElements()) {
				BodyPart mbp = new MimeBodyPart();
				// 选择出每一个附件名
				filename = efile.nextElement().toString();

				// 得到数据源
				FileDataSource fds = new FileDataSource(filename);
				// 得到附件本身并至入BodyPart
				mbp.setDataHandler(new DataHandler(fds));

				// 得到文件名同样至入BodyPart(同时处理中文文件名)
				mbp.setFileName(MimeUtility.encodeWord(fds.getName(), "utf-8",
						null));
				mp.addBodyPart(mbp);
			}
			// 移走集合中的所有元素
			mail.getFile().removeAllElements();

			// Multipart加入到信件
			msg.setContent(mp);

			// 设置信件头的发送日期
			msg.setSentDate(new Date());

			// 发送信件
			Transport.send(msg);

		} catch (MessagingException mex) {
			mex.printStackTrace();
			// Exception ex = null;
			// if ((ex=mex.getNextException())!=null){
			// ex.printStackTrace();
			// }
			// return false;
		}
		return true; // 发送成功
	}

	// SMTP验证类(内部类),继承javax.mail.Authenticator
	class MyAuthenticator extends Authenticator {
		private String strUser;
		private String strPwd;

		public MyAuthenticator(String user, String password) {
			this.strUser = user;
			this.strPwd = password;
		}

		protected PasswordAuthentication getPasswordAuthentication() {
			return new PasswordAuthentication(strUser, strPwd);
		}
	}

}



 


 

package com.yc.mail;

public class Test1 {
	public static void main(String args[]) throws Exception {

		MailFacade mailFacade = new MailFacade();

		Mail mail = new Mail(); 
		mail.setSendAddress("[email protected]");   //发送方
		mail.setInceptAddress("[email protected]"); //接收者 
		mail.setTitle("hello world");
		mail.setContent("您好:这是邮件正文,谢谢!");
		mail.attachfile("c:\\a.txt");
		mail.attachfile("c:\\b.txt");

		System.out.println(mailFacade.startSend(mail));
	}

}



 

你可能感兴趣的:(javamail发送邮件报javax.mail.AuthenticationFailedException错误!)