Prefacio
Creo que todos deben saber que la API abierta general nos llama tendrá un valor de retorno o un código de estado para decirnos si la ejecución es exitosa o no. Sin embargo, Javamail no proporciona dicho valor de retorno.
Por lo tanto, al llamar a Javamail para enviar correos electrónicos, solo podemos usar la excepción de captura para determinar si el correo electrónico se envía correctamente. Creemos que mientras no ocurra ninguna excepción, el correo electrónico se enviará con éxito. Luego, analicemos por qué Javamail no proporciona un valor de retorno, y si el estado exitoso de envío de correo electrónico es confiable a través de excepciones.
Javamail enviando el principio de correo
Al enviar correo usando Javamail, debemos proporcionar una sesión de correo. El proceso de crear una sesión de correo es el siguiente:
Propiedades Props = New Properties (); // La IP y el puerto del servidor que envía el Props.put ("mail.smtp.host", mail_smtp_host); propssput ("mail.smtp.port", mail_smtp_port); // si se requiere autenticación props.put ("mail.smtp.auth", "verdadero"); props.put ("mail.smtp.socketfactory.class", "javax.net.ssl.sslsocketfactory"); Sesión session = session.getDefaultInstance (props, new Authenticator () {PassionAuthentatication protegido getPassWalDauthentication () {// Inicie sesión en el nombre de usuario y la contraseña del correo electrónico que envía el servidor devuelve una nueva contraseña (mail_sender_mail, mail_sender_pass);}});Analizar el código.
Antes de crear la sesión, primero creamos una propiedad. Esta propiedad establece los siguientes parámetros: mail.smtp.host , mail.smtp.port , mail.smtp.auth y mail.smtp.socketFactory.class . Al crear una sesión, también debe pasar el nombre de usuario y la contraseña para enviar el correo electrónico.
El código de correo electrónico de envío es el siguiente:
// 5 pasos para enviar correos electrónicos usando Javamail // 1. Crear sesión Sesión Sesión Sesión = Session.GetInStance (PROP); // Habilitar el modo de depuración de sesión, para que pueda ver el estado de ejecución del correo electrónico enviado por el programa Session.SetDebug (True); // 2. Obtenga el objeto de transporte a través del transporte de sesión ts = session.getTransport (); // 3. Use el nombre de usuario y la contraseña del correo electrónico para conectarse al servidor de correo. Al enviar correo electrónico, el remitente debe enviar el nombre de usuario y la contraseña del correo electrónico al servidor SMTP. El nombre de usuario y la contraseña se pueden verificar antes de que el correo electrónico se pueda enviar al destinatario normalmente. ts.connect ("smtp.sohu.com", "gaCl", "contraseña de correo electrónico"); // 4. Crear un mensaje de mensaje mensaje = createSimplemail (sesión); // 5. Enviar correo ts.sendMessage (mensaje, mensaje.getAllRecipients ()); // Cerrar la conexión ts.close ();El resumen del proceso de envío de correos electrónicos tiene los siguientes pasos:
1. Cree un objeto de sesión que contenga un enlace de red al servidor de correo
2. Cree un objeto de mensaje que represente el contenido del correo electrónico
3. Cree un objeto de transporte
4. Enlace al servidor
5. Enviar mensaje
6. Cierre el enlace
Dado que el transporte es solo una clase abstracta, el método ts.sendMessage es en realidad el método sendMessage de la clase de implementación SMTPTRANSPORT SMTPTransport .
El método sendMessage de SMTPTransport se basa en el protocolo SMTP para enviar correos electrónicos.
Por lo tanto, cuando Javamail usa el servicio SMTP para enviar correos electrónicos, cuando envía el correo electrónico al servidor SMTP, solo puede obtener el estado que se ha enviado a la cola SMTP, pero no puede obtenerlo si el servidor de correo puede enviarlo con éxito. Es decir, no puede garantizar que el correo electrónico se enviará con éxito. Esto depende de la transmisión de contenido del protocolo SMTP.
Sin embargo, si el protocolo SMTP falla, se informará un error. El servicio de transmisión de datos confiable de SMTP proporcionado por TCP transmite mensajes de correo desde el servidor de correo del remitente al servidor de correo del destinatario.
Por lo tanto, podemos pensar que cuando llamamos a Javamail para enviar correos electrónicos, si el programa no informa un error, significa que el correo electrónico se envía correctamente.
Mecanismo de trabajo SMTP
SMTP generalmente tiene dos modos de trabajo: enviar SMTP y recibir SMTP.
El método de trabajo específico es: después de recibir la solicitud de correo electrónico del usuario, determina si el correo electrónico es un correo electrónico local. Si se envía directamente al correo electrónico del usuario, de lo contrario, consulte el registro MX del servidor de correo remoto desde el DNS y establezca un canal de transmisión bidireccional con el SMTP remoto. Después de eso, el comando SMTP es enviado por el SMTP de envío, recibido por el SMTP receptor, y la respuesta se transmite en la dirección opuesta. Una vez que se establece el canal de transmisión, el remitente SMTP envía un comando de correo para indicar el remitente del correo. Si el destinatario de SMTP puede recibir el correo, la respuesta OK se devolverá. El remitente SMTP luego emite un comando RCPT para confirmar si se ha recibido el correo electrónico. Si el destinatario de SMTP lo recibe, devuelve una respuesta OK; Si no se puede recibir, envía una respuesta de rechazo (pero no aborta toda la operación de correo electrónico), y ambas partes repetirán esto muchas veces. Cuando el destinatario recibe todos los correos electrónicos, se recibirá una secuencia especial. Si el destinatario procesa con éxito los correos electrónicos, devolverá una respuesta OK.
Proceso de trabajo SMTP
El protocolo de transferencia de correo simple (SMTP) es un protocolo de transmisión de correo electrónico basado en texto que se utiliza en Internet para intercambiar correo entre servidores de correo. SMTP es un servicio de nivel de aplicación que se puede adaptar a varios sistemas de red.
Los comandos y respuestas de SMTP se basan en el texto, con unidades de comportamiento de comando, y la nueva línea es CR/LF. La información de respuesta generalmente tiene solo una línea, comenzando con un código de 3 dígitos, y una descripción de texto muy corta se puede adjuntar más adelante.
SMTP debe pasar por tres etapas: establecer una conexión, entregar correo y liberar una conexión. Específicamente:
(1) Establecer una conexión TCP.
(2) El cliente envía un comando Helo al servidor para identificar la identidad propia del remitente, y el cliente luego envía un comando de correo.
(3) El servidor responde con OK, lo que indica que está listo para recibir.
(4) El cliente envía el comando RCPT.
(5) El lado del servidor indica si está dispuesto a recibir correos electrónicos para el destinatario.
(6) Fin de la negociación, enviar correo electrónico y usar los datos de comando para enviar el contenido de entrada.
(7) Termine este envío y salga con el comando dejar de lado.
El servidor SMTP ruta correos electrónicos basados en el intercambio de correo (MX) en DNS. Al enviar correos electrónicos, el servidor de correo electrónico se encuentra de acuerdo con el sufijo de dirección del destinatario. SMTP completa las funciones de edición, recopilación y lectura de correos electrónicos a través del agente de usuario (UA); y transmite los correos electrónicos al destino a través del Agente de transferencia de correo (MTA).
Resumir
Lo anterior es todo el contenido de este artículo. Espero que el contenido de este artículo sea de ayuda para su estudio o trabajo. Si tiene alguna pregunta, puede dejar un mensaje para comunicarse.