JavaMail相关问题

今天做公司的项目,需要用到邮件发送,由于以前没有这方面的经验,遇到了不少问题,最终还是依靠google将问题解决。但是担心不久就忘掉,还是记下来为好。

import java.util.Properties;

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 * 邮件服务
 * 
 * @author shelltea
 * 
 */
public class MailService {
	private static final String HOST = "smtp.gmail.com";
	private static final String USER_NAME = "";
	private static final String PASSWORD = "";
	private static final String FROM = "shelltea@gmail.com";
	private String to;
	private String subject;
	private String content;

	/**
	 * 构造方法
	 * 
	 * @param to
	 *            收件人邮箱
	 */
	public MailService(String to) {
		this.to = to;
	}

	/**
	 * 发送邮件,在调用此方法之前,请设置邮件模式
	 * 
	 * @throws AddressException
	 * @throws MessagingException
	 */
	public void send() throws AddressException, MessagingException {
		Properties props = new Properties();
		props.put("mail.smtp.host", HOST);// 指定SMTP服务器
		props.put("mail.smtp.auth", "true");// 指定是否需要SMTP验证
		props.put( "mail.smtp.starttls.enable" , "true" ); 

		Session mailSession = Session.getDefaultInstance(props);

		Message message = new MimeMessage(mailSession);
		message.setFrom(new InternetAddress(FROM));// 发件人
		message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));// 收件人

		message.setSubject(subject);// 邮件主题
		message.setText(content);// 邮件内容
		message.saveChanges();

		Transport transport = mailSession.getTransport("smtp");
		transport.connect(HOST, USER_NAME, PASSWORD);
		transport.sendMessage(message, message.getAllRecipients());
		transport.close();
	}

	/**
	 * 设置邮件为发送帐户和密码模式
	 * 
	 * @param name
	 * @param password
	 */
	public void nameAndPasswordMode(String name, String password) {
		this.subject = "";
		this.content = "尊敬的客户:您好!您的账号为:" + name + ",密码为:" + password
				+ "。请妥善保存,并及时更改。";
	}
}

 下面是测试代码:

import javax.mail.MessagingException;
import javax.mail.internet.AddressException;

import org.junit.Test;

public class MailServiceTest {
	@Test
	public void testSendMail() {
		MailService mailService = new MailService("shelltea@126.com");
		mailService.nameAndPasswordMode("dasdasd", "123345567");
		try {
			mailService.send();
		} catch (AddressException e) {
			e.printStackTrace();
		} catch (MessagingException e) {
			e.printStackTrace();
		}
	}
}

 执行下就出现了下面的异常:

Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream 

 gogole了下,发现是javaee.jar包和mail.jar冲突了,解决办法是:删除javaee.jar中的mail和activation文件夹。重新测试又出现异常:

530 5.7.0 Must issue a STARTTLS command first

 解决办法是加上:

props.put( "mail.smtp.starttls.enable" , "true" ); 

 重新启动测试,打开126邮箱,成功收到邮件!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值