example - ¿Alguien sabe una biblioteca de entrega de correo(SMTP) para Java?
java mail gmail (3)
Me gustaría enviar correos sin molestar con el servidor SMTP que se utiliza para la entrega.
Así que JavaMail API no funciona para mí porque tengo que especificar un servidor SMTP para conectarme.
Me gustaría que la biblioteca descubra por sí misma qué servidor SMTP es responsable de qué dirección de correo electrónico al consultar el registro MX del dominio de la dirección de correo.
Estoy buscando algo como aspirina . Lamentablemente, no puedo usar Aspirin en sí porque el desarrollo se detuvo el 2004 y la biblioteca no se puede comunicar correctamente con los servidores reforzados con spam moderno.
Una versión incrustable de James haría la tarea. Pero no he encontrado documentación sobre si esto es posible.
¿O sabe alguien sobre otras bibliotecas que podría usar?
Una posible solución: obtenga el registro MX por su cuenta y use JavaMail API .
Puede obtener el registro MX usando el proyecto dnsjava :
Dependencia Maven2:
<dependency>
<groupId>dnsjava</groupId>
<artifactId>dnsjava</artifactId>
<version>2.0.1</version>
</dependency>
Método para la recuperación de registros MX:
public static String getMXRecordsForEmailAddress(String eMailAddress) {
String returnValue = null;
try {
String hostName = getHostNameFromEmailAddress(eMailAddress);
Record[] records = new Lookup(hostName, Type.MX).run();
if (records == null) { throw new RuntimeException("No MX records found for domain " + hostName + "."); }
if (log.isTraceEnabled()) {
// log found entries for debugging purposes
for (int i = 0; i < records.length; i++) {
MXRecord mx = (MXRecord) records[i];
String targetString = mx.getTarget().toString();
log.trace("MX-Record for ''" + hostName + "'':" + targetString);
}
}
// return first entry (not the best solution)
if (records.length > 0) {
MXRecord mx = (MXRecord) records[0];
returnValue = mx.getTarget().toString();
}
} catch (TextParseException e) {
throw new RuntimeException(e);
}
if (log.isTraceEnabled()) {
log.trace("Using: " + returnValue);
}
return returnValue;
}
private static String getHostNameFromEmailAddress(String mailAddress) throws TextParseException {
String parts[] = mailAddress.split("@");
if (parts.length != 2) throw new TextParseException("Cannot parse E-Mail-Address: ''" + mailAddress + "''");
return parts[1];
}
Envío de correo a través del código de JavaMail:
public static void sendMail(String toAddress, String fromAddress, String subject, String body) throws AddressException, MessagingException {
String smtpServer = getMXRecordsForEmailAddress(toAddress);
// create session
Properties props = new Properties();
props.put("mail.smtp.host", smtpServer);
Session session = Session.getDefaultInstance(props);
// create message
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(fromAddress));
msg.setRecipient(Message.RecipientType.TO, new InternetAddress(toAddress));
msg.setSubject(subject);
msg.setText(body);
// send message
Transport.send(msg);
}
Esta es una forma completamente incorrecta de manejar esto.
Cualquier persona que esté conectada a Internet tendrá a su disposición algún tipo de servidor SMTP "legítimo" para recibir el envío del correo electrónico: su ISP, su oficina, etc.
QUIERES aprovechar porque hacen varias cosas por ti.
1) toman su mensaje y la responsabilidad de manejar ese mensaje. Después de dejarlo, ya no es su problema.
2) El servidor maneja todas las tecnologías de correo no deseado. Aún mejor, cuando / si esas tecnologías cambian (¿Dominantes, claves de dominio?), El servidor lo maneja, no su código.
3) Usted, como cliente de ese sistema de envío de correo, ya tiene las credenciales que necesita para hablar con ese servidor. Los principales servidores SMTP están bloqueados mediante autenticación, rango de IP, etc.
4) No estás reinventando la rueda. Aproveche la infraestructura que tiene. ¿Estás escribiendo una aplicación o un servidor de correo? Configurar el servidor de correo es una tarea diaria que normalmente es simple de hacer. Todos esos usuarios "tontos" casuales en Internet han logrado configurar el correo electrónico.
No lo hagas
El envío de correo electrónico es mucho más complejo de lo que parece. Los servidores de correo electrónico se destacan en (o deberían sobresalir en) la entrega confiable.
Configure un servidor de correo electrónico por separado si lo necesita, que será esencialmente lo mismo que implementar uno en Java (dudo que encuentre bibliotecas para esta tarea), serían esencialmente servidores de correo completos, pero mucho más simple.