이메일 서버를 사용하지 않고 이메일 보내기


11

JavaMail은 일반적으로 전자 우편 공급자의 SMTP 인터페이스를 통해 전자 우편 서버를 사용하여 전자 우편을 보냅니다. 전자 메일 서버를 사용하여 전자 메일을 보내야합니까?

전자 메일을 보낼 웹 사이트가 있으며 가능하면 전자 메일 서버를 사용하지 않고 웹 사이트 코드에서 직접 전자 메일을 보내려고합니다. JavaMail FAQ에 전자 우편 서버가 필요하다고 나와 있습니다.

JavaMail 또는 다른 API와 함께 전자 우편 서버를 사용하지 않고 전자 우편을 보내는 방법이 있습니까?


아니요, 불가능합니다. 전자 메일 클라이언트는 보내는 전자 메일을 어떻게받을 수 있습니까?
Oded


JavaMail에서 작동하지 않을 수도있는 대안은 Postfix와 같은 MTA를 설정하는 것입니다. 로컬 메일 서버가 있으므로 원격 메일 서버가 필요하지 않습니다.
user16764

정확하게. 이전 Microsoft Mail MTA가 "메일이없는"것으로 생각할 수 있습니다. Microsoft Mail 클라이언트는 모두 파일 시스템 (파일 서버 의 방법). 그러나 그 시스템에서 다른 사람에게 메일을 발송하는 유일한 방법은 항상 서버를 포함하는 게이트웨이를 이용하는 것입니다. 의도 한 질문을 했습니까?
Craig

답변:


11

주소 도메인의 MX 레코드에 언급 된 SMTP 서버 중 하나에 직접 이메일을 전달할 수 있습니다. 일반적으로 그것은 나쁜 생각입니다.

메일을 로컬 서버로 전달하는 것이 빠릅니다. 거의 즉시 계속해서 다른 작업을 수행하여 서버가 전달을 처리하도록 할 수 있습니다.

실제 배달에는 시간이 걸릴 수 있습니다. 예를 들어 원격 메일 서버가 느려질 수 있습니다. 또는 메일을 먼저 거부 할 수 있습니다. 스팸에 대한 알려진 전략으로, 보낸 사람에게 두 번째로 메일을 보내도록 요청합니다. 일부 스팸 봇에서는 그렇지 않습니다.

또한 메일 서버는 하루 후에 쉽게 다시 시도 할 수 있으므로 원격 서버가 다운되면 메일이 손실 될 위험이 줄어 듭니다.


스팸 방지에 관한 정보를 보내 주셔서 감사합니다. 이러한 전략을 변경하여 전자 메일 서버를 사용하는 것이 어떻게 좋은지 알 수 있습니다.
Dean Schulze

2
기술적으로 그렇게하면 응용 프로그램이 메일 서버로 바뀌므로 여전히 뼈대이지만 메일 서버를 사용하고 있습니다.
jwenting

@ jwenting 다른 서버에 연결하는 클라이언트로만 작동하는 경우 어떻게 메일 서버가됩니까? 차라리 당신이했다 "서버"를 할 생각 "클라이언트"당신에게 연결 ... 적어도 하나에서
제이슨 Goemaat

또한 앱에서 직접 원격 메일 서버로 전송하면 SPF / DMARC 안티 스팸 검사를하지 않아도됩니다.
Craig

1

그것은 모두 "사용"이 정확히 무엇을 의미하는지에 달려 있습니다.

"사용"에 전자 메일 서버의 직접 사용 만 포함 된 경우 다른 종류의 서비스 를 통해 전자 메일 서버로 간접적으로 보내도록 메일을 전달할 수 있습니다 . 실제 사용 사례의 경우 이것은 "Good Enough ™"솔루션 인 것 같습니다.

그러나 귀하의 질문이 문자 그대로 " 이메일 서버를 전혀 사용하지 않고 " 의미 하는 경우, 소프트웨어가 POP3를 제외하고 원하는 방식으로 대상 클라이언트의받은 편지함에 메일을 넣을 수있는 경우에만 가능합니다. 또는 IMAP 또는 이메일 컨텍스트에 사용 된 기타 이메일 관련 프로토콜 (이러한 프로토콜을 사용하는 경우 해당 특정 프로그램은 메일 서버 역할을하므로 허용되지 않음)

질문에 대답하려면 : 그렇습니다. 적어도 이론 상으로는.


전자 메일 서버를 사용하여받는 사람 전자 메일 서버 (2 개의 전자 메일 서버)로 전자 메일을 보내야하는지 묻습니다. 내 코드 (1 개의 전자 메일 서버)에서받는 사람 전자 메일 서버로 직접 보내는 데 관심이 있습니다. 받는 사람 전자 메일 서버를 우회하려고하지 않고 보내는 전자 메일 서버 만 우회합니다.
Dean Schulze

이메일을 보내려면 메일 클라이언트 또는 메일 서버 여야합니다. 대부분의 경우 클라이언트로 메일을 보내려면 허용 목록이나 권한 부여를 통해 신뢰를 받아야합니다. 서버로 보내려면 권한 부여 규칙이 더 엄격한 경우가 많습니다. 받는 사람의 전자 메일 서버가 유효한 보낸 사람을 인증하는 데 사용하는 규칙에 따라 다릅니다.
BobDalgleish

@ BobDalgleish : 귀하의 컴퓨터에 대한 액세스를 관리 할 수 ​​있다면 무엇이든 할 수 있습니다. 받은 편지함에 메일을 포함합니다. 나는 이것이 단지 학문적 선택이라는 것에 동의하지만 그 질문의 범위는 명확하지 않았다.
JensG

@ DeanSchulze : Johannes는 이미 그 특정 질문에 대답 한 이유와 왜 그렇게 좋은 생각이 아닌지 생각합니다. 내가 당신이라면 서비스 아이디어를 선호합니다.
JensG

0

Java 코드에서 누군가에게 메일을 보내야하는 경우 일부 메일 서버 신임 정보에 액세스해야합니다. 항상 그런 것은 아닙니다.

Google은 메일 서버 중 하나에 무료로 액세스하여 Java 코드로 사용할 수 있습니다. 내 자신에 대한 메모와 같은 경우 작성된 ​​코드 아래. 따라서 언젠가 필요하면 여기를 참조하십시오 : http://www.computerbuzz.in/2014/02/how-to-send-email-in-java-using-gmail.html

private void setMailServerProperties()
    {
        Properties emailProperties = System.getProperties();
        emailProperties.put("mail.smtp.port", "586");
        emailProperties.put("mail.smtp.auth", "true");
        emailProperties.put("mail.smtp.starttls.enable", "true");
        mailSession = Session.getDefaultInstance(emailProperties, null);
    }

    private MimeMessage draftEmailMessage() throws AddressException, MessagingException
    {
        String[] toEmails = { "computerbuzz@gmail.com" };
        String emailSubject = "Test email subject";
        String emailBody = "This is an email sent by http://www.computerbuzz.in.";
        MimeMessage emailMessage = new MimeMessage(mailSession);
        /**
         * Set the mail recipients
         * */
        for (int i = 0; i < toEmails.length; i++)
        {
            emailMessage.addRecipient(Message.RecipientType.TO, new InternetAddress(toEmails[i]));
        }
        emailMessage.setSubject(emailSubject);
        /**
         * If sending HTML mail
         * */
        emailMessage.setContent(emailBody, "text/html");
        /**
         * If sending only text mail
         * */
        //emailMessage.setText(emailBody);// for a text email
        return emailMessage;
    }

    private void sendEmail() throws AddressException, MessagingException
    {
        /**
         * Sender's credentials
         * */
        String fromUser = "user-email@gmail.com";
        String fromUserEmailPassword = "*******";

        String emailHost = "smtp.gmail.com";
        Transport transport = mailSession.getTransport("smtp");
        transport.connect(emailHost, fromUser, fromUserEmailPassword);
        /**
         * Draft the message
         * */
        MimeMessage emailMessage = draftEmailMessage();
        /**
         * Send the mail
         * */
        transport.sendMessage(emailMessage, emailMessage.getAllRecipients());
        transport.close();
        System.out.println("Email sent successfully.");
    }
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.