Gửi e-mail mà không cần sử dụng máy chủ e-mail


11

JavaMail gửi e-mail bằng máy chủ email, thường thông qua giao diện SMTP của nhà cung cấp e-mail. Có nhất thiết phải sử dụng máy chủ email để gửi e-mail không?

Tôi có một trang web sẽ gửi e-mail và nếu có thể tôi muốn gửi e-mail trực tiếp từ mã trang web mà không cần sử dụng máy chủ email. Câu hỏi thường gặp về JavaMail nói rằng cần có máy chủ email.

Có cách nào để gửi e-mail mà không cần sử dụng máy chủ e-mail, bằng JavaMail hoặc API khác không?


Không, no không thể. Làm thế nào để khách hàng email có được email bạn đang gửi?
Oded


Một cách khác, sẽ không nhất thiết phải hoạt động với JavaMail, là thiết lập một MTA như Postfix. Sau đó, bạn sẽ không cần một máy chủ thư từ xa, bởi vì bạn có một máy chủ cục bộ.
dùng16764

Đúng. Tôi cho rằng bạn có thể nói rằng Microsoft Mail MTA cũ là "không có máy chủ" theo nghĩa là các máy khách Microsoft Mail đều xử lý riêng việc nhận và đưa thư đến / từ kho lưu trữ thư trung tâm trên hệ thống tệp (trên máy chủ tệp , bởi đường). Nhưng ngay cả khi đó, cách duy nhất để đưa thư ra khỏi hệ thống đó đến người khác là thông qua một cổng, luôn có máy chủ. Bạn có chắc là bạn đã hỏi câu hỏi bạn dự định không?
Craig

Câu trả lời:


11

Bạn có thể gửi email trực tiếp đến một trong các máy chủ SMTP được đề cập trong bản ghi MX của miền của địa chỉ. Tuy nhiên, đó thường là một ý tưởng tồi:

Việc gửi thư đến một máy chủ cục bộ rất nhanh - bạn gần như có thể tiếp tục ngay lập tức và làm một việc khác và để máy chủ xử lý việc gửi.

Việc gửi thực tế có thể mất một thời gian, ví dụ máy chủ thư từ xa có thể bị chậm. Hoặc nó có thể từ chối thư trước - đây là một chiến lược đã biết chống thư rác để nói với người gửi thử gửi thư lần thứ hai, điều mà một số bot spam sẽ không làm được.

Ngoài ra, máy chủ thư có thể dễ dàng thử lại một ngày sau đó hoặc lâu hơn khi máy chủ từ xa bị hỏng, điều này giúp giảm nguy cơ mất thư.


Cảm ơn các thông tin liên quan đến phòng chống thư rác. Tôi có thể thấy việc thay đổi các chiến lược này làm cho việc sử dụng máy chủ email trở thành một ý tưởng tốt.
Dean Schulze

2
về mặt kỹ thuật, làm điều đó biến ứng dụng của bạn thành một máy chủ thư, vì vậy bạn vẫn đang sử dụng một máy chủ thư, mặc dù là một bộ xương khá trần.
jwenting

@jwenting làm thế nào nó sẽ là một máy chủ mail nếu chỉ hoạt động như một máy khách kết nối với các máy chủ khác? Tôi thà nghĩ là một "máy chủ" mà bạn phải có ít nhất một "khách hàng" kết nối với bạn ...
Jason Goemaat

Ngoài ra, gửi đến các máy chủ thư từ xa trực tiếp từ ứng dụng của bạn có khả năng chạy các kiểm tra chống thư rác SPF / DMARC.
Craig

1

Tất cả phụ thuộc vào ý của bạn bằng cách "sử dụng" chính xác.

Nếu "sử dụng" chỉ bao gồm việc sử dụng trực tiếp máy chủ email, thì bạn có thể chuyển thư để gửi qua một số loại dịch vụ khác gián tiếp đến máy chủ email. Đối với các trường hợp sử dụng thực tế, đây dường như là một giải pháp "Đủ tốt ™" đối với tôi.

Tuy nhiên, nếu câu hỏi của bạn có nghĩa đen là "hoàn toàn không liên quan đến bất kỳ máy chủ email nào ", thì điều này chỉ có thể, nếu phần mềm của bạn có thể đưa thư vào hộp thư đến của ứng dụng khách theo cách bạn chọn, ngoại trừ POP3 hoặc IMAP hoặc bất kỳ giao thức liên quan đến email nào khác được sử dụng trong ngữ cảnh email (bởi vì, nếu bạn sử dụng một giao thức như vậy, chương trình cụ thể đó sẽ hoạt động như máy chủ thư, không được phép)

Để trả lời câu hỏi: Có. Ít nhất là trong lý thuyết.


Tôi đang hỏi liệu tôi có phải sử dụng máy chủ email để gửi e-mail đến máy chủ e-mail của người nhận không (2 máy chủ e-mail). Tôi quan tâm đến việc gửi trực tiếp đến máy chủ email người nhận từ mã của tôi (1 máy chủ email). Tôi không cố gắng bỏ qua máy chủ e-mail của người nhận, chỉ là máy chủ gửi email.
Dean Schulze

Để gửi email, bạn cần phải là ứng dụng thư khách hoặc máy chủ thư. Trong hầu hết các trường hợp, để gửi thư dưới dạng khách hàng, bạn cần được tin cậy, bằng danh sách trắng hoặc ủy quyền. Để gửi như một máy chủ, các quy tắc ủy quyền thường nghiêm ngặt hơn. Nó thực sự phụ thuộc vào các quy tắc mà máy chủ e-mail của người nhận sử dụng để ủy quyền cho người gửi hợp lệ.
BobDalgleish

@BobDalgleish: Nếu tôi có thể quản lý quyền truy cập vào máy của mình, tôi có thể làm bất cứ điều gì. Bao gồm cả việc đưa thư vào hộp thư đến của bạn. Tôi đồng ý rằng đây chỉ là một lựa chọn học thuật, nhưng câu hỏi không quá rõ ràng.
JensG

@DeanSchulze: Tôi nghĩ rằng johannes đã trả lời câu hỏi cụ thể đó và tại sao nó không phải là một ý tưởng tốt. Nếu tôi là bạn, tôi sẽ ủng hộ ý tưởng dịch vụ.
JensG

0

Nếu chúng tôi phải gửi thư cho ai đó từ mã Java, chúng tôi cần có quyền truy cập vào một số thông tin đăng nhập của máy chủ thư. Vâng, không phải lúc nào.

Google đã cung cấp quyền truy cập miễn phí vào một trong các máy chủ thư của nó và bạn có thể sử dụng nó trong mã Java. Dưới đây viết mã nếu giống như một ghi chú cho bản thân tôi. Vì vậy, nếu tôi cần đôi khi, bạn có thể tham khảo tại đây: http://www.computerbuzz.in/2014/02/how-to-send-email-in-java-USE-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.");
    }
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.