머리말
이메일 전송 코드는 이전 응용 프로그램에서 직접 복사되었습니다. 과거에 사용한 Tencent 이메일 서비스는 프로그램 실행에 아무런 문제가 없습니다. 나중에 Microsoft의 Office365 메일 서비스로 수정 한 후 두 가지 문제가 발생했습니다.
질문 1, TLS 암호화 설정
예외 정보는 다음과 같습니다.
스레드의 예외 "main"com.sun.mail.smtp.smtpsendfailedexception : 530 5.7.57 smtp; 고객은 우편에서 익명 메일을 보내도록 인증되지 않았습니다.
이것은 해결하기가 더 쉽습니다. 정보를 찾은 후 다음 구성을 추가하십시오.
mail.smtp.starttls.enable = true
질문 2 : 프롬프트 프로토콜이 NULL :
예외 정보는 다음과 같습니다.
스레드 예외 "main"javax.mail.nosuchproviderexception : 유효하지 않은 프로토콜 : javax.mail.session.gettransport (session.java:667)의 javax.mail.session.gettransport (session.gettransport)의 javax.mail.session.gettransport의 javax.mail.session.getprovider (session.java:449)의 잘못된 프로토콜 : null at javax.mail.session.getprovider javax.mail.session.gettransport (session.java:634)
이 문제는 응용 프로그램을 생산 환경에 배포 한 후에 만 발생합니다. 검사 후, 내가 호출 한 JAR 패키지는 Maven에 지정된 버전이 아님을 발견했습니다. 나중에 응용 프로그램에서 사용한 JAR 패키지가 컨테이너 (즉, 부두)에서 사용하는 JAR 패키지와 충돌 한 것으로 확인되었습니다. 컨테이너에서 사용하는 JAR 버전은 오래되었지만 컨테이너의 항아리는 기본적으로로드됩니다. 이 문제를 해결하는 두 가지 방법이 있습니다.
컨테이너에 의존하는 항아리로 코드를 다시 작성합니다.
컨테이너의 항아리를 업데이트하십시오.
두 번째 선택은 다소 위험하므로 첫 번째 옵션을 사용하십시오. 한 줄만 수정하십시오.
전송 전송 = 세션 .getTransport ( "SMTP");
이 문제는 javax.mail 버전 1.4에서 발생합니다. 나중에 더 높은 버전은 SMTP 프로토콜을 사용하여 기본적으로 이메일을 보냅니다.
수정 된 프로그램 :
package com.zhyea.zytools; import java.util.date; import java.util.properties; import javax.mail.message; import javax.mail.session; import javax.mail.transport; import javax.mail.internet.internetAddress; public classe javax.mail.internet.mail.mail.mail.mail.mail.mail.mail.mail.mail.mail.mail.mail.mail. 정적 최종 문자열 mail_smtp_host = "smtp.exmail.qq.com"; 개인 정적 최종 정수 mail_smtp_port = 587; 개인 정적 최종 부울 Mail_smtp_auth = true; 개인 정적 최종 문자열 mail_smtp_user = "[email protected]"; 개인 정적 최종 문자열 mail_smtp_password = "Robinzhyea"; 개인 정적 속성 소품 = 새로운 속성 (); static {props.put ( "mail.smtp.host", mail_smtp_host); props.put ( "mail.smtp.auth", mail_smtp_auth); props.put ( "mail.smtp.user", mail_smtp_user); props.put ( "mail.smtp.password", mail_smtp_password); props.put ( "mail.smtp.starttls.enable", true); }/*** 이메일 보내기*/public static void send (문자열 to, 문자열 제목, 문자열 내용) {try {세션 세션 = 세션 .getInstance (props); // 메일 세션 mimemessage message = new mimemessage (session); // 메일 세션 메시지에서 새 메시지 객체를 생성합니다. message.setRecipient (message.recipientType.to, new InternetAdDress (to)); // 수신자를 설정하고 수신 유형을 // 메시지 내용을 설정하여 // message.settext (mailContent); // 일반 텍스트 보내기 todo message.setSubject (title); // 제목 메시지를 설정합니다. // html mail을 보내면 컨텐츠 스타일은 더 풍부합니다 .SetSentDate (new date ()); // 보내기 시간 메시지를 설정합니다. 전송 .connect (mail_smtp_user, mail_smtp_password); 송신 .sendMessage (메시지, message.getallRecipients ()); // 이메일 보내기, 두 번째 매개 변수는 모두 수신자 주소 전송 (); } catch (예외 e) {e.printstacktrace (); }}} 패키지 com.zhyea.zytools; import java.util.date; import java.util.properties; import javax.mail.message; import javax.mail.session; import javax.mail.transport; import javax.mail.internet.internetaddress; import javax.mail.internet.mimemessage; 공개 클래스 MailSender {private static final string mail_smtp_host = "smtp.exmail.qq.com"; 개인 정적 최종 정수 mail_smtp_port = 587; 개인 정적 최종 부울 Mail_smtp_auth = true; 개인 정적 최종 문자열 mail_smtp_user = "[email protected]"; 개인 정적 최종 문자열 mail_smtp_password = "Robinzhyea"; 개인 정적 속성 소품 = 새로운 속성 (); static {props.put ( "mail.smtp.host", mail_smtp_host); props.put ( "mail.smtp.auth", mail_smtp_auth); props.put ( "mail.smtp.user", mail_smtp_user); props.put ( "mail.smtp.password", mail_smtp_password); props.put ( "mail.smtp.starttls.enable", true); }/*** 이메일 보내기*/public static void send (문자열 to, 문자열 제목, 문자열 내용) {try {세션 세션 = 세션 .getInstance (props); // 메일 세션 mimemessage message = new mimemessage (session); // 메일 세션 메시지에서 새 메시지 객체를 생성합니다. message.setRecipient (message.recipientType.to, new InternetAdDress (to)); // 수신자를 설정하고 수신 유형을 // 메시지 내용을 설정하여 // message.settext (mailContent); // 일반 텍스트 보내기 todo message.setSubject (title); // 제목 메시지를 설정합니다. // html mail을 보내면 컨텐츠 스타일은 더 풍부합니다 .SetSentDate (new date ()); // 보내기 시간 메시지를 설정합니다. 전송 .connect (mail_smtp_user, mail_smtp_password); 송신 .sendMessage (메시지, message.getallRecipients ()); // 이메일 보내기, 두 번째 매개 변수는 모두 수신자 주소 전송 (); } catch (예외 e) {e.printstacktrace (); }}}
위는이 기사의 모든 내용입니다. 이 기사의 내용이 모든 사람의 연구와 작업에 도움이되기를 바랍니다.