java使用网易邮箱163.com发送邮件(servlet编程)

注意事项

1、注意开启pop3/SMTP服务,同时注意发送邮箱时,使用的密码为开启后所随机提供的密码:
在这里插入图片描述
2、删除jdk安全文件(java.security)的加密算法,我的具体路径为:D:\Environment\jdk_18.0.1\conf\security(较新的版本安全稳健路径)
D:\Environment\jdk_18.0.1\lib\security(早先的版本在该路径下)
找到:

jdk.tls.disabledAlgorithms=SSLv3, TLSv1, TLSv1.1, RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL

改为如下:

jdk.tls.disabledAlgorithms=RC4, DES, MD5withRSA, \
    DH keySize < 1024, EC keySize < 224, 3DES_EDE_CBC, anon, NULL

3、Could not connect to SMTP host: smtp.163.com, port: 465, response: -1
解决办法是在java代码中添加如下语句:

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

4、注意如下语句的第二个参数要使用发送的邮箱后缀

props.put("mail.smtp.host", "smtp.163.com");

5、选择端口时注意如下事项:
在这里插入图片描述

测试代码

import dao.UserDAOImpl;
import model.User;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Properties;

/**
 * Servlet implementation class ResetPassword
 */
public class ResetPassword extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private UserDAOImpl userDAO = new UserDAOImpl();
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ResetPassword() {
        super();
        // TODO Auto-generated constructor stub
    }

	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String username = request.getParameter("username");
		
		String err = "";
		if (username.equals("")) {
			err += "必须输入完整的信息!";
		} else {
			if (userDAO.checkUser(username) == false) {
				err += "用户名不存在!";
			}
		}

		if (err.length() > 0) {
			request.setAttribute("err", err);
		}
		
		String url = "/resetpassword.jsp";
		try {
			if (err.length() == 0) err. Lengthr u = userDAO.getUser(username);
				User new_user = new User(u.getUser_id(), username, "passwordreset", u.getNgaysinh(), u.getGioitinh(), u.getEmail(), u.getSdt(), u.getDiachi(), u.getRole());
				userDAO.updateUser(new_user);
				url = "/login.jsp";
				String mess = "检查电子邮件接收新密码!";
				request.setAttribute("mess", mess);
				
				//通过电子邮件发送新密码。
				   final String username_mail = "xxx@163.com";
				   final String password = "随机码";
				   String to = u.getEmail();
				   String subject = "Reset Password";
				   String text ="<i>Reset Password</i><br/>";
						   text+="<p>User: <strong>"; text+=username; text+="</strong></p>";
						   text+="<p>New password: <strong>passwordreset</strong></p>";
				   Properties props = new Properties();
				   props.put("mail.smtp.auth", "true");
					props.put("mail.smprops. Putls.enable", "true");
					props.put("mail.smtp.ssl.enable", true);
					props.put("mail.smprops. Put "smtp.163.com");
					props.put("mail.smtp.port", "25");
				   Session session_mail = Session.getInstance(props,
				   new javax.mail.Authenticator() {
				      protected PasswordAuthentication getPasswordAuthentication() {
				        return new PasswordAuthentication(username_mail, password);
				      }
				   });
				   try {
				     Message message = new MimeMessage(session_mail);
				     message.setHeader("Content-Type", "text/plain; charset=UTF-8");
				     message.setFrom(new InternetAddress(username_mail));
				     message.setRecipients(Message.RecipientType.TO,
				     InternetAddress.parse(to));
				     message.setSubject(subject);
				     message.setContent(text, "text/html; charset=utf-8");
				     Transport.send(message);
				   } catch (MessagingException e) {
				     throw new RuntimeException(e);
				   }
				
			} else {
				url = "/resetpassword.jsp";
				
			}
			RequestDispatcher rd = getServletContext()
					.getRequestDispatcher(url);
			rd.forward(request, response);
		} catch (Exception e) {
			e.printStackTrace();
			response.sendRedirect("/resetpassword.jsp");
		}
	}

}

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是一段简单的处理发送邮件Servlet 代码,使用JavaMail API 和 Servlet API: ```java import java.io.IOException; import java.io.PrintWriter; 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; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class SendMailServlet extends HttpServlet { private String host; private String port; private String username; private String password; @Override public void init() throws ServletException { // 初始化 SMTP 服务器和登录用户名密码 host = getServletContext().getInitParameter("mail.smtp.host"); port = getServletContext().getInitParameter("mail.smtp.port"); username = getServletContext().getInitParameter("mail.username"); password = getServletContext().getInitParameter("mail.password"); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // 获取表单数据 String recipient = request.getParameter("recipient"); String subject = request.getParameter("subject"); String content = request.getParameter("content"); // 设置邮件属性 Properties properties = new Properties(); properties.put("mail.smtp.host", host); properties.put("mail.smtp.port", port); properties.put("mail.smtp.auth", "true"); properties.put("mail.smtp.starttls.enable", "true"); // 创建会话 Session session = Session.getInstance(properties, new javax.mail.Authenticator() { protected javax.mail.PasswordAuthentication getPasswordAuthentication() { return new javax.mail.PasswordAuthentication(username, password); } }); try { // 创建邮件 Message message = new MimeMessage(session); message.setFrom(new InternetAddress(username)); message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipient)); message.setSubject(subject); message.setText(content); // 发送邮件 Transport.send(message); // 返回成功信息 response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><body>"); out.println("<h3>邮件发送成功</h3>"); out.println("</body></html>"); } catch (AddressException e) { // 处理地址异常 e.printStackTrace(); } catch (MessagingException e) { // 处理邮件发送异常 e.printStackTrace(); } } } ``` 在 web.xml 中配置 Servlet: ```xml <servlet> <servlet-name>SendMailServlet</servlet-name> <servlet-class>SendMailServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>SendMailServlet</servlet-name> <url-pattern>/sendmail</url-pattern> </servlet-mapping> ``` 然后在 HTML 表单中调用 Servlet: ```html <form method="post" action="sendmail"> <label>收件人:</label><input type="text" name="recipient"><br> <label>主题:</label><input type="text" name="subject"><br> <label>内容:</label><textarea name="content"></textarea><br> <input type="submit" value="发送"> </form> ``` 请注意,此代码仅为演示目的。在实际生产环境中,您需要考虑更多的安全问题,并使用适当的验证和错误处理技术。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值