머리말
나는 모든 사람들이 일반 Open API가 우리를 우리에게 요구한다는 것을 알고 있어야한다고 생각합니다. 그러나 Javamail은 그러한 반환 값을 제공하지 않습니다.
따라서 이메일을 보내기 위해 Javamail에 전화 할 때 Catch Exception 만 사용하여 이메일이 성공적으로 전송되는지 여부를 결정할 수 있습니다. 우리는 예외가 발생하지 않는 한 이메일이 성공적으로 전송 될 것이라고 생각합니다. 그런 다음 Javamail이 반환 값을 제공하지 않는 이유와 성공적인 이메일 전송 상태가 예외를 통해 신뢰할 수 있는지 여부를 분석 해 봅시다.
Javamail은 메일 원칙을 전송합니다
Javamail을 사용하여 메일을 보낼 때는 메일 세션을 제공해야합니다. 메일 세션을 만드는 과정은 다음과 같습니다.
속성 propss = 새로운 속성 (); // 메일 소품을 보내는 서버의 IP와 포트 ( "mail.smtp.host", mail_smtp_host); props.put ( "mail.smtp.port", mail_smtp_port); // 인증이 필요한지 props.put ( "mail.smtp.auth", "true"); props.put ( "mail.smtp.socketfactory.class", "javax.net.ssl.sslsocketfactory"); 세션 세션 = session.getDefaultInstance (propss, new authenticator () {보호 된 passwordAuthentication getPasswordAuthentication () {// 이메일 보내기 서버 보내는 이메일의 사용자 이름과 암호에 로그인 새 passwordAuthentication (mail_sender_mail, mail_sender_pass);});코드를 분석하십시오.
세션을 만들기 전에 먼저 속성을 만듭니다. mail.smtp.host 속성은 다음 매개 변수 mail.smtp.port mail.smtp.socketFactory.class mail.smtp.auth . 세션을 만들 때는 이메일을 보내려면 사용자 이름과 비밀번호를 전달해야합니다.
전자 메일 코드 보내기는 다음과 같습니다.
// Javamail을 사용하여 이메일을 보내는 5 단계 // 1. 세션 세션 세션 생성 = 세션 .getInstance (prop); // 프로그램 세션에서 보낸 이메일의 실행 상태를 볼 수 있도록 세션 디버그 모드를 활성화합니다. // 2. 세션 전송을 통해 전송 객체를 가져옵니다. ts = session.getTransport (); // 3. 이메일의 사용자 이름과 비밀번호를 사용하여 메일 서버에 연결하십시오. 이메일을 보낼 때 발신자는 이메일의 사용자 이름과 비밀번호를 SMTP 서버에 제출해야합니다. 이메일을 수신자에게 정상적으로 전송하기 전에 사용자 이름과 비밀번호를 확인할 수 있습니다. ts.connect ( "smtp.sohu.com", "gacl", "이메일 비밀번호"); // 4. 메시지 작성 메시지 메시지 메시지 = CreateSimpleMail (세션); // 5. Mail ts.SendMessage를 보내기 (메시지, message.getallRecipients ()); // 연결을 닫습니다 ts.Close ();
이메일 보내기 프로세스 요약에는 다음과 같은 단계가 있습니다.
1. 메일 서버에 네트워크 링크가 포함 된 세션 객체 생성
2. 이메일 내용을 나타내는 메시지 개체 만들기
3. 전송 개체를 만듭니다
4. 서버 링크
5. 메시지를 보내십시오
6. 링크를 닫습니다
Transport는 추상 클래스이기 때문에 ts.sendMessage 방법은 실제로 SMTPTRANSPORT 구현 클래스 SMTPTransport 의 sendMessage 메소드입니다.
SMTPTransport 의 sendMessage 방법은 SMTP 프로토콜에 의존하여 이메일을 보냅니다.
따라서 Javamail이 SMTP 서비스를 사용하여 이메일을 보내면 SMTP 서버로 이메일을 보낼 때 SMTP 큐로 전송 된 상태 만 얻을 수 있지만 메일 서버가 성공적으로 보낼 수 있는지 여부를 얻을 수는 없습니다. 즉, 이메일이 성공적으로 전송 될 것이라고 보장 할 수는 없습니다. 이는 SMTP 프로토콜의 컨텐츠 전송에 따라 다릅니다.
그러나 SMTP 프로토콜이 실패하면 오류 가보고됩니다. TCP가 제공하는 SMTP의 신뢰할 수있는 데이터 전송 서비스는 발신자의 메일 서버에서 수신자의 메일 서버로 메일 메시지를 전송합니다.
따라서 우리는 Javamail에 전화하여 이메일을 보내면 프로그램에 오류가보고되지 않으면 이메일이 성공적으로 전송된다고 생각할 수 있습니다.
SMTP 작업 메커니즘
SMTP에는 일반적으로 SMTP를 보내고 SMTP를받는 두 가지 작업 모드가 있습니다.
특정 작업 방법은 다음과 같습니다. 사용자의 이메일 요청을받은 후 이메일이 로컬 이메일인지 결정합니다. 사용자의 이메일로 직접 전송되면 DNS에서 원격 메일 서버의 MX 레코드를 쿼리하고 원격 수신 SMTP와 함께 양방향 전송 채널을 설정하십시오. 그 후, SMTP 명령은 수신 SMTP에 의해 수신 된 SMTP에 의해 전송되며 응답은 반대 방향으로 전송됩니다. 변속기 채널이 설정되면 SMTP 발신자는 메일의 발신자를 표시하기 위해 메일 명령을 보냅니다. SMTP 수신자가 메일을받을 수있는 경우 OK 답변이 반환됩니다. 그런 다음 SMTP 발신자는 RCPT 명령을 발행하여 이메일이 수신되었는지 확인합니다. SMTP 수신자가 그것을 받으면 괜찮은 답변을 반환합니다. 받을 수없는 경우 거부 응답을 보내지 만 (전체 이메일 운영을 중단하지는 않습니다), 양 당사자는이를 여러 번 반복합니다. 수신자가 모든 이메일을 받으면 특별한 시퀀스가 수신됩니다. 수신자가 이메일을 성공적으로 처리하면 확인 응답을 반환합니다.
SMTP 작업 프로세스
SMTP (Simple Mail Transfer Protocol)는 인터넷에서 우편 서버간에 메일을 교환하는 데 사용되는 텍스트 기반 이메일 전송 프로토콜입니다. SMTP는 다양한 네트워크 시스템에 적응할 수있는 응용 프로그램 수준 서비스입니다.
SMTP의 명령과 응답은 모두 명령 동작 단위와 함께 텍스트를 기반으로하며 Newline은 CR/LF입니다. 응답 정보에는 일반적으로 3 자리 코드로 시작하여 하나의 줄만 있으며 매우 짧은 텍스트 설명은 나중에 첨부 될 수 있습니다.
SMTP는 연결 설정, 메일 제공 및 연결 공개의 세 단계를 거쳐야합니다. 구체적으로:
(1) TCP 연결을 설정합니다.
(2) 클라이언트는 Helo 명령을 서버로 보내 발신자의 신원을 식별하고 클라이언트는 메일 명령을 보냅니다.
(3) 서버는 OK로 응답하여 수신 준비가되었음을 나타냅니다.
(4) 클라이언트는 RCPT 명령을 보냅니다.
(5) 서버쪽에는 수신자를 위해 이메일을받을 의사가 있는지 여부가 나타납니다.
(6) 협상 종료, 이메일 보내기 및 명령 데이터를 사용하여 입력 컨텐츠를 보냅니다.
(7)이 전송을 종료하고 종료 명령으로 종료하십시오.
SMTP 서버는 DNS의 메일 교환 (MX)을 기준으로 이메일을 운행합니다. 이메일을 보낼 때 전자 메일 서버는 수신자의 주소 접미사에 따라 있습니다. SMTP는 사용자 에이전트 (UA)를 통해 이메일 편집, 수집 및 읽기 기능을 완료합니다. 메일 전송 에이전트 (MTA)를 통해 이메일을 목적지로 전송합니다.
요약
위는이 기사의 전체 내용입니다. 이 기사의 내용이 귀하의 연구 나 작업에 도움이되기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다.