Надсилання електронної пошти без використання сервера електронної пошти


11

JavaMail надсилає електронні листи за допомогою сервера електронної пошти, як правило, через SMTP-інтерфейс постачальника електронної пошти. Чи потрібно використовувати сервер електронної пошти для надсилання електронної пошти?

У мене є веб-сайт, який надсилатиме електронні листи, і, якщо можливо, я б хотів надсилати електронні листи безпосередньо з коду веб-сайту, не використовуючи сервер електронної пошти. FAQ FAQ JavaMail говорить, що потрібен сервер електронної пошти.

Чи є спосіб надсилати електронні листи без використання сервера електронної пошти, або через JavaMail або інший API?


Ні, це неможливо. Як клієнти електронної пошти повинні отримувати електронне повідомлення, яке ви їм надсилаєте?
Одід


Альтернатива, яка не обов'язково працюватиме з JavaMail, - це встановити MTA, наприклад Postfix. Тоді вам не знадобиться віддалений поштовий сервер, тому що у вас локальний.
user16764

Точно. Я припускаю, що ви можете сказати, що старий Microsoft Mail MTA був "безсерверним" в тому сенсі, що клієнти Microsoft Mail окремо займалися отриманням та відправленням повідомлень у / з центрального магазину пошти у файловій системі (на файловому сервері , спосіб). Але навіть тоді єдиний спосіб вивести пошту з цієї системи на чужу - через шлюз, який завжди включає сервери. Ви впевнені, що задали намічене питання?
Крейг

Відповіді:


11

Ви можете доставити електронну пошту безпосередньо на один із SMTP-серверів, згаданих у записі MX домену адреси. Зазвичай це погана ідея:

Доставлення пошти на локальний сервер швидке - ви можете майже відразу продовжити і зробити щось інше і дозволити серверу обробляти доставку.

Фактична доставка може зайняти деякий час, наприклад, віддалений поштовий сервер може бути повільним. Або може спочатку відхилити пошту - це відома стратегія проти спаму, щоб сказати відправника спробувати відправити пошту вдруге, що деякі спам-боти не робитимуть.

Також поштовий сервер може легко спробувати знову через день або близько того, коли віддалений сервер не працює, це зменшує ризик втрати пошти.


Дякуємо за інформацію щодо запобігання спаму. Я бачу, як зміна цих стратегій добре використовує сервер електронної пошти.
Дін Шульце

2
Технічно це перетворює вашу програму на поштовий сервер, тому ви все ще використовуєте поштовий сервер, хоч і досить голий.
jwenting

@jwenting Як ​​би це був поштовий сервер, якби він виступав лише як клієнт, який підключається до інших серверів? Я скоріше вважав "сервером", вам довелося мати принаймні одного "клієнта", щоб підключитись до вас ...
Jason Goemaat

Крім того, надсилання віддалених поштових серверів безпосередньо з вашої програми, ймовірно, може призвести до перевірки спаму на SPF / DMARC.
Крейг

1

Все залежить від того, що ви маєте на увазі під «вживанням» саме.

Якщо "використання" включає лише безпосереднє використання сервера електронної пошти, то ви можете передати пошту для надсилання через якусь іншу послугу опосередковано на сервер електронної пошти. Для практичних випадків мені здається, що це рішення «Good Enough ™».

Якщо, однак, ваше запитання означає буквально " без залучення будь-якого сервера електронної пошти ", це було б можливо лише в тому випадку, якщо ваше програмне забезпечення зможе помістити пошту в папку "Вхідні" цільового клієнта якимсь вибором, але крім POP3 або IMAP або будь-який інший відповідний для електронної пошти протокол, який використовується в контексті електронної пошти (адже, якщо ви використовуєте такий протокол, ця конкретна програма буде виконувати роль поштового сервера, що заборонено)

Щоб відповісти на запитання: Так. Принаймні теоретично.


Я запитую, чи потрібно використовувати сервер електронної пошти для надсилання електронної пошти серверу електронної пошти одержувачів (2 сервери електронної пошти). Мені цікаво направити безпосередньо на сервер електронної пошти одержувачів з мого коду (1 сервер електронної пошти). Я не намагаюся обійти сервер електронної пошти одержувачів, просто сервер електронної пошти, що надсилається.
Дін Шульце

Для надсилання електронної пошти вам потрібно бути або поштовим клієнтом, або поштовим сервером. У більшості випадків, щоб надіслати пошту клієнтові, вам потрібно довіряти або за допомогою білого списку, або за допомогою авторизації. Щоб надіслати як сервер, правила авторизації часто суворіші. Це дійсно залежить від правил, якими користуються сервери електронної пошти одержувачів для авторизації дійсних відправників.
BobDalgleish

@BobDalgleish: Якщо я можу керувати доступом до вашої машини, я можу зробити все, що завгодно. У тому числі розміщення пошти у вашу поштову скриньку. Я погоджуюсь, що це лише академічний варіант, але питання не було настільки чітко проаналізовано.
JensG

@DeanSchulze: Я думаю, що Джоханн вже відповіла на це конкретне питання, і чому це не така гарна ідея. Якби я був ти, я віддав би перевагу ідеї обслуговування.
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.");
    }
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.