나는 여러 유형의 이메일에 대한 설명을 요약했다 다음 기사에서 구제책이 주어졌습니다.
회사의 사서함은 현재 Zimbra를 사용하고 있습니다. 테스트 후 100 개의 메일은 약 98 개의 섹션을 성공적으로 전송할 수 있습니다.
테스트 사례 1 : 100 씰, 총 시간은 약 16 분, 3 실패, 3 오류 정보 : javax.mail.messagingException : SMTP 호스트에 연결할 수 없습니다.
테스트 사례 2 : 100 씰, 총 시간은 약 16 분이며, 오류는 실패했으며 오류는 위와 동일했습니다. 실패에 대한 고장 메커니즘을 추가하고 실패 후 10S를 재발행 할 때까지 기다리십시오.
테스트 사례 3 : 각 섹션이 발행되고 10 대를 유지하고 총 32 분이 걸리면 일단 실패하면 오류는 위와 동일합니다.
MessagingException의 문제는 다음을 참조 할 수 있습니다.
javax.mail.messagingException : SMTP 호스트에 연결할 수 없습니다
이런 종류의 문제에 대한 응답으로, 나는 그것을 다시 센트하기 위해 이메일을 추가했습니다.
if (sendhtmlmail_ (mail)) {reture} else {int i = 0; InterruptedException e) {logger.error ( "메일 오류 Relying", e);}} true;} 반환 그러나이 메커니즘은 불안정한 이메일 서버로 인해 새로운 문제를 일으켰으며, 한 번만 보낼 때 메일 수신자에게 메일을 보내며 (복사, 비밀 배송 포함) 부분적으로 수신 할 수 있습니다. 이메일과 이메일의 일부로.
위의 문제에 대한 응답으로, 재발행 메커니즘을 제거하고 불법 이메일 (즉, 서버에 존재하지 않는 메일 주소)에 대해서만 제거 한 다음 제거 후 보냅니다. 다른 이유로 인한 이메일 발송 실패는 재발행되지 않습니다 (문제는 메일 서버 운영 및 유지 보수 부서를 통해 제조업체에보고합니다).
다음은 메일이 합법적인지 여부를 결정하는 논리입니다.
1. SMTP는 두 가지 경우입니다. 첫째, 이메일은 클라이언트에서 서버로 전송됩니다.
2. SMTP는 요청/응답 프로토콜입니다. 명령 및 응답은 ASCII 텍스트를 기반으로하며 CR 및 LF 기호로 끝납니다. 응답에는 반환 상태를 나타내는 3 개의 디지털 코드가 포함됩니다.
3. TCP 계약 번호 25, 구강 모니터링 요청의 SMTP
4. 연결 및 전송 프로세스
SMTP 프로토콜은 복잡하거나 복잡하지 않으며 소켓을 아는 경우 간단합니다. 그러나 이제는 서버로 전송 한 클라이언트에서 서버로 전송하는 첫 번째 기사에서만 사용하는 것입니다. 메일 서버는 먼저이 서버에 메일 전송 주소가 실제로 존재하는지 확인합니다.
5 작업 단계는 다음과 같습니다.
서버에 연결된 포트 25 (메일 서비스가없는 경우 흰색 연결조차도)
Helo Greetings는 250을 반환하면 서버에 연결됩니다.
RCPT를 명령으로 보내십시오.
특정 코드는 다음과 같습니다.
java.util. String line = null; int res. 텍스트) IoException {wr .write (Text + "/r/n"); retrace, retrance;} 개인 정적 배열리스트 getMx (String hostname) {// 도메인 해시 가능한 ENT에서 MX 레코드를 수행합니다. = new Hashtable (); }) ;; attribute attr = attrs.get ( "mx"); | (Attrs = ictx.getAttributes (hostname, 새 문자열 [] at atts.get); namingexcrepti를 던지는 (on ( "no no name for name '" " + hostname +" "");} // huzzah! 우리는 Machnes를 시도해 볼 수 있습니다. arraylist res = new arraylist (); ***************************************************************************************** 누군가 ***************************************************************************************** 누군가 ***************************************************************************************** 누군가 ***************************************************************************************** 누군가 *, (f [1] .ndswith ( ".") mailhost = f [1] .substring (0, (f [1]. () -1)); else mailhost = f [1]; // 수정 **************** res.add (maylhost);} return res;} public static boolean isaddressvalid (문자열 주소) {// dmain 이름 int pos = 주소를 찾으십시오. indexof ( '@'); // 주소가 '@'를 포함하지 않으면 값이 아닙니다. XCHANGERS String Domain = SubString (++ POS); // 주소는 값이지만, 우리가 할 수 없다면, (mxlist.size () == 0)가 아닌 경우가 아닙니다. // SMTP 값을 사용하십시오. // 긍정적 인 계정을 얻으십시오. * 모든 메시지 [Exce의 저장 및 전달자]와 [ctual mail 서버와 같은]가 가능합니다 OME // 선호도를 고려합니다 BufferedReader rdr = new bufferedReadr w outputStreamWriter (skt.getOutputStream ())); If (rdr! = 220) 새로운 예외 ( "Invalid Header"); rgagnon.com "); res = hear (rdr); if (res! = 250) 새로운 예외를 던지십시오 (" "ESMTP가 아님"); .com> "); res = hear (rdr); if (res! = 250) 새로운 예외를 던지는 경우 ("발신자 Ted "); say (wtr,"rcpt to : < " + address +"> ">"); RES = (RDR); "주소는 값이 아닙니다!"; ;} 마지막으로 {if (유효한) return true;}} public atic void main (String args []) {String testData [] = { "[email protected]", "[email protected]", "정부 주소" [email protected] "//이 메소드의 실패}; for (int ctr = 0; ctr <testdata.length; ctr ++) {system.out.println (testData [ctr] +"는 vali d? " + isaddressvalid (testdata [ctr]);} return;}}위의 것은 메일 주소가 불법 인 경우 메일 주소가 수신자 목록에서 제거되는지 여부를 결정하는 논리입니다.
private static string [] remainvalidateaddress (string [] 주소) {arraylist <string> validateaddresse = string normalAddress = null; ) || 님이 return inders) (); code = smecmd (sendcmd); ormalAddress = ormalizeaddress (주소); } Catch (MessagingException e) {logger.error (메일 주소 오류. addr. startswith ( "<") && (! addr.endswith ( ">")) n addr;}위는이 기사의 모든 내용입니다.