Estoy tratando de enviar un correo electrónico usando Java:
import java.util.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class SendEmail {
public static void main(String [] args) {
// Recipient's email ID needs to be mentioned.
String to = "[email protected]";
// Sender's email ID needs to be mentioned
String from = "[email protected]";
// Assuming you are sending email from localhost
String host = "localhost";
// Get system properties
Properties properties = System.getProperties();
// Setup mail server
properties.setProperty("mail.smtp.host", host);
// Get the default Session object.
Session session = Session.getDefaultInstance(properties);
try{
// Create a default MimeMessage object.
MimeMessage message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(from));
// Set To: header field of the header.
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(to));
// Set Subject: header field
message.setSubject("This is the Subject Line!");
// Now set the actual message
message.setText("This is actual message");
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
}catch (MessagingException mex) {
mex.printStackTrace();
}
}
}
Obtengo el error:
javax.mail.MessagingException: Could not connect to SMTP host: localhost, port: 25;
nested exception is:java.net.ConnectException: Connection refused: connect
at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1706)
at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:525)
¿Funcionará este código para enviar correo electrónico?
Respuestas:
El siguiente código funciona muy bien con el servidor SMTP de Google. Debe proporcionar su nombre de usuario y contraseña de Google.
Actualización del 11 de diciembre de 2015
El nombre de usuario + contraseña ya no es una solución recomendada. Esto es debido a
Google había lanzado la API de Gmail: https://developers.google.com/gmail/api/?hl=en . Deberíamos usar el método oAuth2, en lugar de nombre de usuario + contraseña.
Aquí está el fragmento de código para trabajar con la API de Gmail.
GoogleMail.java
Para construir un servicio de Gmail autorizado a través de oAuth2, aquí está el fragmento de código.
Utils.java
Para proporcionar una forma fácil de usar de autenticación oAuth2, utilicé JavaFX para mostrar el siguiente cuadro de diálogo de entrada
La clave para mostrar un cuadro de diálogo de oAuth2 fácil de usar se puede encontrar en MyAuthorizationCodeInstalledApp.java y SimpleSwingBrowser.java
fuente
Send
lugar de,send
pero es una clase útil. ¿Alguna idea sobre las implicaciones de seguridad de almacenar la contraseña de Gmail en el código?El siguiente código funcionó para mí.
fuente
Archivos jar necesarios
Haga clic aquí - Cómo agregar jarras externas
fuente
La respuesta corta - No.
La respuesta larga: no, ya que el código se basa en la presencia de un servidor SMTP que se ejecuta en la máquina local y escucha en el puerto 25. El servidor SMTP (técnicamente el MTA o Agente de transferencia de correo) es responsable de comunicarse con el Agente de usuario de correo. (MUA, que en este caso es el proceso Java) para recibir correos electrónicos salientes.
Ahora, los MTA suelen ser responsables de recibir correos electrónicos de usuarios para un dominio en particular. Entonces, para el dominio gmail.com, serían los servidores de correo de Google los responsables de autenticar los agentes de usuario de correo y, por lo tanto, transferir los correos a las bandejas de entrada en los servidores de GMail. No estoy seguro de si GMail confía en los servidores de retransmisión de correo abiertos, pero ciertamente no es una tarea fácil realizar la autenticación en nombre de Google y luego retransmitir el correo a los servidores de GMail.
Si lee las preguntas frecuentes de JavaMail sobre el uso de JavaMail para acceder a GMail , notará que el nombre de host y el puerto apuntan a los servidores de GMail, y ciertamente no a localhost. Si tiene la intención de utilizar su máquina local, deberá realizar la retransmisión o el reenvío.
Probablemente necesitará comprender el protocolo SMTP en profundidad si tiene la intención de llegar a alguna parte cuando se trata de SMTP. Puede comenzar con el artículo de Wikipedia sobre SMTP , pero cualquier progreso adicional en realidad requerirá la programación contra un servidor SMTP.
fuente
Necesita un servidor SMTP para enviar correos. Hay servidores que puede instalar localmente en su propia PC, o puede usar uno de los muchos servidores en línea. Uno de los servidores más conocidos es el de Google:
Acabo de probar con éxito las configuraciones permitidas de Google SMTP usando el primer ejemplo de Simple Java Mail :
Observe los diversos puertos y estrategias de transporte (que manejan todas las propiedades necesarias para usted).
Curiosamente, Google también requiere TLS en el puerto 25, aunque las instrucciones de Google dicen lo contrario .
fuente
Ha pasado bastante tiempo desde que se publicó. Pero a partir del 13 de noviembre de 2012 puedo verificar que el puerto 465 todavía funciona.
Consulte la respuesta de GaryM en este foro . Espero que esto ayude a algunas personas más.
fuente
El siguiente código funciona muy bien. Pruébelo como una aplicación java con javamail-1.4.5.jar
fuente
Bueno, no, no sin cambiar algunas partes ya que está obteniendo un error. Actualmente está intentando enviar correo a través de un servidor SMTP que se ejecuta en localhost pero no está ejecutando ninguno, por lo tanto, el
ConnectException
.Suponiendo que el código está bien (realmente no lo verifiqué), tendrá que ejecutar un servidor SMTP local o usar uno (remoto) (de su ISP).
Con respecto al código, puede encontrar ejemplos en el paquete de descarga de JavaMail como se menciona en las preguntas frecuentes :
fuente
Probar esto. funciona bien para mi Asegúrese de que antes de enviar un correo electrónico, debe otorgar acceso a una aplicación menos segura en su cuenta de Gmail. Así que vaya al siguiente enlace y pruebe con este código java.
Activar gmail para una aplicación menos segura
Necesita importar el archivo javax.mail.jar y el archivo activación.jar a su proyecto.
Este es el código completo para enviar correo electrónico en Java.
fuente
Aquí está la solución de trabajo hermano. Está garantizado.
[email protected]
Abra este enlace a continuación:
https://support.google.com/accounts/answer/6010255?hl=es
Aquí está mi código:
fuente
He puesto mi clase de trabajo de gmail java en pastebin para su revisión, preste especial atención al método "startSessionWithTLS" y es posible que pueda ajustar JavaMail para proporcionar la misma funcionalidad. http://pastebin.com/VE8Mqkqp
fuente
Su código funciona, además de configurar la conexión con el servidor SMTP. Necesita un servidor de correo en ejecución (SMTP) para enviarle el correo electrónico.
Aquí está su código modificado. Comenté las partes que no son necesarias y cambié la creación de la sesión para que requiera un Autenticador. Ahora solo averigüe el SMPT_HOSTNAME, USERNAME y PASSWORD que desea usar (su proveedor de Internet generalmente los proporciona).
Siempre lo hago así (usando un servidor SMTP remoto que conozco) porque ejecutar un servidor de correo local no es tan trivial en Windows (aparentemente es bastante fácil en Linux).
fuente
De hecho, 465 funciona y la excepción que está obteniendo puede deberse a que no está abierto el puerto SMTP 25. De forma predeterminada, el número de puerto es 25. Sin embargo, puede configurarlo utilizando el agente de correo que está disponible como código abierto: Mercury
Para simplificar, simplemente use la siguiente configuración y estará bien.
Para obtener aún más: consulte el ejemplo de trabajo completo desde cero aquí
fuente
Tengo la misma excepción que tú. La razón de esto es no tener un servidor smpt en funcionamiento en su máquina (ya que su host es localhost). Si usa Windows 7, no tiene servidor SMTP. así que tendrás que descargar, instalar y configurar con dominio y creando cuentas. Usé hmailserver como servidor smtp instalado y configurado en mi máquina local. https://www.hmailserver.com/download
fuente
Puede encontrar una clase Java completa y muy simple para enviar correos electrónicos usando la cuenta de Google (gmail) aquí,
Enviar correo electrónico usando java y una cuenta de Google
Utiliza las siguientes propiedades
fuente