문제

Javamail API와 SMTP 서버를 통해 메일을 보내는 것에 관한 다른 몇 가지 질문을 찾았지만 TLS 보안을 사용하여 논의하지 않았습니다. Javamail을 사용하여 작업 SMTP Mail Server를 통해 상태 업데이트를 직접 보내려고하지만 TLS가 필요하며 Javamail을 사용하여 TLS 암호화가 필요한 SMTP 서버에 액세스하는 방법에 대한 온라인에서는 찾을 수 없습니다. 누구든지 이것을 도울 수 있습니까?

도움이 되었습니까?

해결책

실제로 제품에 TLS를 사용하여 메일을 사용할 수있는 경우 알림 코드가 있습니다.

Java 메일 속성을 설정해야합니다. TLS가 필요하지만 SMTP 서버가 SSL을 사용하는 경우 SSL이 필요할 수 있습니다.

Properties props = new Properties();
props.put("mail.smtp.starttls.enable","true");
props.put("mail.smtp.auth", "true");  // If you need to authenticate
// Use the following if you need SSL
props.put("mail.smtp.socketFactory.port", d_port);
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");

그런 다음 이것을 Javamail 세션 또는 다른 세션 인스턴티 인자에게 전달할 수 있습니다. Session.getDefaultInstance(props).

다른 팁

좋은 게시물, 라인

props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

SMTP 서버가 사용하는 경우 필수입니다 SSL 인증, Gmail SMTP 서버와 마찬가지로. 그러나 서버가 사용하는 경우 TLS에 대한 일반 텍스트 인증, Java Mail은 초기 연결이 일반 텍스트 인 것에 대해 불평하기 때문에 존재하지 않아야합니다.

또한 최신 버전의 Java Mail을 사용하고 있는지 확인하십시오. 최근에 나는 이전 프로젝트의 오래된 Java Mail Jars를 사용했으며 로그인 프로세스가 실패했기 때문에 코드를 작동시킬 수 없었습니다. 최신 버전의 Java Mail로 업그레이드 한 후 오류의 이유는 명확 해졌습니다. Javax.net.ssl.sslhandshakeexception이었으며, 이전 버전의 lib에 버리지 않았습니다.

위의 예제의 설정은 내가 사용중인 서버에서 작동하지 않았습니다.Authsmtp.com). 이 오류를 계속 얻었습니다.

javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?

mail.smtp.socketfactory 설정을 제거하고 모든 것이 작동했습니다. 마지막 설정은 이것입니다 (SMTP 인증은 사용되지 않았으며 다른 곳에서 포트를 설정했습니다).

java.util.Properties props = new java.util.Properties();
props.put("mail.smtp.starttls.enable", "true");

다음 코드 만 사용하십시오. Java를 통해 이메일을 보내는 것이 정말 유용하며 작동합니다.

import java.util.*;
import javax.activation.CommandMap;
import javax.activation.MailcapCommandMap;
import javax.mail.*;
import javax.mail.Provider;
import javax.mail.internet.*;

public class Main {

    public static void main(String[] args) {
            final String username="your@gmail.com";
            final String password="password";
            Properties prop=new Properties();
            prop.put("mail.smtp.auth", "true");
            prop.put("mail.smtp.host", "smtp.gmail.com");
            prop.put("mail.smtp.port", "587");
            prop.put("mail.smtp.starttls.enable", "true");

            Session session = Session.getDefaultInstance(prop,
          new javax.mail.Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(username, password);
          }
        });
          try {
                 String body="Dear Renish Khunt Welcome";
                 String htmlBody = "<strong>This is an HTML Message</strong>";
                 String textBody = "This is a Text Message.";
         Message message = new MimeMessage(session);
         message.setFrom(new InternetAddress("your@gmail.com"));
                 message.setRecipients(Message.RecipientType.TO,InternetAddress.parse("receiver@gmail.com"));
        message.setSubject("Testing Subject");
        MailcapCommandMap mc = (MailcapCommandMap) CommandMap.getDefaultCommandMap();
        mc.addMailcap("text/html;; x-java-content-handler=com.sun.mail.handlers.text_html");
        mc.addMailcap("text/xml;; x-java-content-handler=com.sun.mail.handlers.text_xml");
        mc.addMailcap("text/plain;; x-java-content-handler=com.sun.mail.handlers.text_plain");
        mc.addMailcap("multipart/*;; x-java-content-handler=com.sun.mail.handlers.multipart_mixed");
        mc.addMailcap("message/rfc822;; x-java-content-handler=com.sun.mail.handlers.message_rfc822");
        CommandMap.setDefaultCommandMap(mc);
            message.setText(htmlBody);
                        message.setContent(textBody, "text/html");
            Transport.send(message);

            System.out.println("Done");

        } catch (MessagingException e) {
            e.printStackTrace();
        }

    }

}

와 함께 간단한 자바 메일 5.0.0 (SimpleJavamail.org) 매우 간단하며 도서관은 귀하를 위해 모든 세션 속성을 처리합니다.

Google의 SMTP 서버를 사용하는 예는 다음과 같습니다.

Email email = EmailBuilder.startingBlank()
        .from("lollypop", "lol.pop@somemail.com")
        .to("C.Cane", "candycane@candyshop.org")
        .withSubject("hey")
        .withPlainText("We should meet up!")
        .withHTMLText("<b>We should meet up!</b>")
        .buildEmail();

MailerBuilder.withSMTPServer("smtp.gmail.com", 25, "user", "pass", SMTP_TLS)
        .buildMailer()
        .sendMail(email);

MailerBuilder.withSMTPServer("smtp.gmail.com", 587, "user", "pass", SMTP_TLS)
        .buildMailer()
        .sendMail(email);

MailerBuilder.withSMTPServer("smtp.gmail.com", 465, "user", "pass", SMTP_SSL)
        .buildMailer()
        .sendMail(email);

2 단계 로그인이 켜져 있으면 생성해야합니다. 응용 프로그램 별 비밀번호 Google 계정에서.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top