java邮件发送

        之前做过简单的邮件发送,不过一次电脑的意外崩溃让我的代码都离我而去,现在偶尔想起来,只好重新从头再来一遍了,为防惨剧再次发生,特写此文!

        首先邮件发送需要几个必备的jar包,可以去官网下载,同样可以在csdn里百度,不少大牛有分享的,在这儿提供一个链接:

              http://download.csdn.net/detail/cdmamata/4876813

        必备的几个jar包如下图:


 

        当然怕有些人第一次尝试邮件发送,在这儿提个醒,邮箱发送前一定要到邮箱里先把pop3/SMTP/IMAP协议开起来,这个是必须的,要不然你就是一直在白费力气了

        在这儿我测试了两个版本,首先是客户端的,不废话直接贴代码:

<span style="font-size:14px;">package com.wyp.newTest;

import java.util.Properties;

import javax.mail.Authenticator;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.PasswordAuthentication;
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;

public class MailService {
	public static void main(String[] args) {
		try {
			String userName = "我的账号@163.com";
			String password = "密码(如果是163则需要是第三方登录的授权码)";
			String smtp_server = "smtp.163.com";
			String from_mail_address = userName;
			String to_mail_address = "指定收件邮箱";
			Authenticator auth = new PopupAuthenticator(userName, password);
			Properties mailProps = new Properties();
			mailProps.put("mail.smtp.host", smtp_server);
			mailProps.put("mail.smtp.auth", "true");
			mailProps.put("username", userName);
			mailProps.put("password", password);

			Session mailSession = Session.getDefaultInstance(mailProps, auth);
			mailSession.setDebug(true);
			MimeMessage message = new MimeMessage(mailSession);
			message.setFrom(new InternetAddress(from_mail_address));
			message.setRecipient(Message.RecipientType.TO, new InternetAddress(
					to_mail_address));
			message.setSubject("Mail Testw");

			MimeMultipart multi = new MimeMultipart();
			BodyPart textBodyPart = new MimeBodyPart();
			textBodyPart.setText("hello");
			// textBodyPart.setFileName("37af4739a11fc9d6b311c712.jpg");

			multi.addBodyPart(textBodyPart);
			message.setContent(multi);
			message.saveChanges();
			Transport.send(message);
		} catch (Exception ex) {
			System.err.println("邮件发送失败的原因是:" + ex.getMessage());
			System.err.println("具体的错误原因");
			ex.printStackTrace(System.err);
		}
	}
}

class PopupAuthenticator extends Authenticator {
	private String username;
	private String password;

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

	public PasswordAuthentication getPasswordAuthentication() {
		return new PasswordAuthentication(this.username, this.password);
	}
}

</span>

     

    在写上述代码的时候最重要的就是我居然忘了那个密码该填网易邮箱授权码,费了好大的劲... .... ,就是下图的这个:


       如果在上述操作的时候发现自己忘了之前设置的授权密码也没关系,选择【关闭】--》【打开】,会让你重新设置的,这回可别忘了啊!!!这样一来基本客户端的邮箱发送就没问题了,我在用的时候仅测试了英文内容的发送,其他的自己测试,如果在测试过程中报错,可以去这个网址找着错误码都是什么意思,网易解释的很清楚:

http://help.163.com/09/1224/17/5RAJ4LMH00753VB8.html



      写到这儿基本的邮件发送应该没问题了,但是如果想更自由的模仿邮箱应该怎么做呢?其实无论是用java的swing或是采用javaweb都是可以很容易办到的,我是直接实现测试了本文开端给的链接中的javaMail官方给的servlet代码【进入本文给出的第一个链接,下载里面的代码】:


  

    新建一个web项目,将上述两个文件加入下项目中即可:


    
     开启服务器,浏览器效果【同样密码一样要是授权密码】:



我在登陆以后进入页面报了一个莫名其妙的错误:

A3 NO SELECT The login is O EXAMINE The login is not saf your mail client: http://mail.163.com/dashi

    解决方法:http://blog.csdn.net/HelloWorld20151118/article/details/49910297

     在代码的编辑中依次又出现了几个问题

    1、比如发件邮箱多了个后缀,变成了xxxxxxxxxxxx@163.com@imap.163.com。

     原因及解决方法:查看代码发现是代码中对发件邮箱默认是不带【@163.com】这一部分的,但是直接将用户名的后缀去掉并没有实际效果,因为邮箱变成【xxxxxxxxxxxxxxx@imap.163.com】了,不符合要求了不是,因此我在代码中将拼接部分去掉了,并且在输入时依然正常输入带后缀的用户名,并在代码中默认发件服务器为【smtp.163.com】

    2、邮件发送的时候报了【•553 authentication is required】
     原因及解决方法:邮箱对默认的第三方登录存在不安全隐患问题,因此需要在代码中加入这些:

        

  props.put("mail.smtp.auth", "true");   
  Session session = Session.getDefaultInstance(props, new SimpleAuthenticator(USER_NAME, PASSWORD));   

    然后重写用户名、密码验证的方法:

class SimpleAuthenticator extends Authenticator {
    
    private String username;
   
    private String password;
   
    public SimpleAuthenticator(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public PasswordAuthentication getPasswordAuthentication() {   
        return new PasswordAuthentication(this.username, this.password);

    }
   
}
   

    终于,大功告成,邮件发出。。。

   代码下载链接:http://pan.baidu.com/s/1kUJ1q2V

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值