LINUX.ORG.RU
решено ФорумTalks

Зачем пилят велосипеды для отправки почты вместо вызова системного MTA?

 , ,


0

1

Пилят нам тут проект, вроде как на java. Проект должен уметь отправлять email. Соотственно, я настроил локальный MTA, оно работает. А тут вдруг выясняется, что локальный MTA их не устраивает и они делают это на уровне своего кода. Это вообще нормально? Я чего-то не понимаю или кто-то не осилил вызов функции?

★★★★★

А php тут при том, что?

Раз пилят на Java, возможно не хотят привязывается к системным особенностям.

Weres ★★★
()

Например, проект может быть кроссплатформенным и работать в том числе и там, где может не быть самого понятия «локальный MTA».

dexpl ★★★★★
()

Я чего-то не понимаю

Именно. Тебе же сказали:

локальный MTA их не устраивает

А ты надул щёки и даже не можешь спросить чем именно не устраивает.
Ты даже не знаешь чем именно не устраивает, но сразу же заявляешь, что они тупые, а ты конь Арамиса.

Stahl ★★☆
()
Ответ на: комментарий от Weres

А php тут при том, что?

php при том, что действующий сайт на php и там прекрасно используется именно системная функция.

возможно не хотят привязывается к системным особенностям

Хм, это интересно. Интересно, на чем еще можно гонять этот проект. Надо спросить. Мож на венде? Гыгы.

targitaj ★★★★★
() автор топика

Проект на java вероятнее всего кроссплатформенный. Так что системный mta - не панацея.

А вообще - слишком мало входной информации.

l0stparadise ★★★★★
()
Ответ на: комментарий от dexpl

Угу, я уже понял. На венде, наверное.

targitaj ★★★★★
() автор топика

Зачем пилят велосипеды

Я отпиливал кусок рулевой колонки, чтобы не торчало лишнее.

invy ★★★★★
()

Так, ок, переформулирую вопрос. В java вызов системного MTA является чем-то сложным/ненормальным? Мне для общего развития. Гугл пробовал, но неверно формулирую, наверное.

targitaj ★★★★★
() автор топика
Ответ на: комментарий от l0stparadise

Linux, AIX, OSX, Solaris, HP-UX

стоп-стоп. А что, в никсах везде по-своему вызывается функция «отправить письмо»? Я не в теме.

targitaj ★★★★★
() автор топика

я настроил локальный MTA

Может им не хочется, чтобы работа их программы зависела ещё и от человека, который будет настраивать им MTA.

PolarFox ★★★★★
()
Ответ на: комментарий от PolarFox

)))) сисадмин - штатный сотрудник. Разраб - на подряде. Разраб сделает и исчезнет.

targitaj ★★★★★
() автор топика
Ответ на: комментарий от targitaj

Зная большую любовь IBM и HP к пакетам, которые «сделали не мы», на aix и hpux может просто не быть штатного mta.

Это все, конечно, паранойя, sendmail там везде есть вполне рабочий, но все сводится к одному и тому же вопросу - почему так решили разработчики?

l0stparadise ★★★★★
()
Последнее исправление: l0stparadise (всего исправлений: 1)

Какие-то странные разработчики, нужно у них спрашивать зачем им это понадобилось.

php-coder ★★★★★
()
Ответ на: комментарий от l0stparadise

почему так решили разработчики?

там человек, которой просит меня открыть порты по протоколу http и тому подобные вещи. Я спрошу, конечно, но есть у меня подозрение...

targitaj ★★★★★
() автор топика

Нормально. Настраивать MTA это сложное дело и мало какой админ это умеет делать. Разворачивание приложения значительно усложняется. Лучше обойтись без него.

Legioner ★★★★★
()
Ответ на: комментарий от l0stparadise

Ок, возвращаясь к вопросу «кроссплатформенности». Не считая венды, нужно оно такое или системной функции достаточно?

targitaj ★★★★★
() автор топика

http://stackoverflow.com/questions/3649014/send-email-using-java

import com.sun.mail.smtp.SMTPTransport;
import java.security.Security;
import java.util.Date;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

/**
 *
 * @author doraemon
 */
public class GoogleMail {
    private GoogleMail() {
    }

    /**
     * Send email using GMail SMTP server.
     *
     * @param username GMail username
     * @param password GMail password
     * @param recipientEmail TO recipient
     * @param title title of the message
     * @param message message to be sent
     * @throws AddressException if the email address parse failed
     * @throws MessagingException if the connection is dead or not in the connected state or if the message is not a MimeMessage
     */
    public static void Send(final String username, final String password, String recipientEmail, String title, String message) throws AddressException, MessagingException {
        GoogleMail.Send(username, password, recipientEmail, "", title, message);
    }

    /**
     * Send email using GMail SMTP server.
     *
     * @param username GMail username
     * @param password GMail password
     * @param recipientEmail TO recipient
     * @param ccEmail CC recipient. Can be empty if there is no CC recipient
     * @param title title of the message
     * @param message message to be sent
     * @throws AddressException if the email address parse failed
     * @throws MessagingException if the connection is dead or not in the connected state or if the message is not a MimeMessage
     */
    public static void Send(final String username, final String password, String recipientEmail, String ccEmail, String title, String message) throws AddressException, MessagingException {
        Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
        final String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";

        // Get a Properties object
        Properties props = System.getProperties();
        props.setProperty("mail.smtps.host", "smtp.gmail.com");
        props.setProperty("mail.smtp.socketFactory.class", SSL_FACTORY);
        props.setProperty("mail.smtp.socketFactory.fallback", "false");
        props.setProperty("mail.smtp.port", "465");
        props.setProperty("mail.smtp.socketFactory.port", "465");
        props.setProperty("mail.smtps.auth", "true");

        /*
        If set to false, the QUIT command is sent and the connection is immediately closed. If set 
        to true (the default), causes the transport to wait for the response to the QUIT command.

        ref :   http://java.sun.com/products/javamail/javadocs/com/sun/mail/smtp/package-summary.html
                http://forum.java.sun.com/thread.jspa?threadID=5205249
                smtpsend.java - demo program from javamail
        */
        props.put("mail.smtps.quitwait", "false");

        Session session = Session.getInstance(props, null);

        // -- Create a new message --
        final MimeMessage msg = new MimeMessage(session);

        // -- Set the FROM and TO fields --
        msg.setFrom(new InternetAddress(username + "@gmail.com"));
        msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipientEmail, false));

        if (ccEmail.length() > 0) {
            msg.setRecipients(Message.RecipientType.CC, InternetAddress.parse(ccEmail, false));
        }

        msg.setSubject(title);
        msg.setText(message, "utf-8");
        msg.setSentDate(new Date());

        SMTPTransport t = (SMTPTransport)session.getTransport("smtps");

        t.connect("smtp.gmail.com", username, password);
        t.sendMessage(msg, msg.getAllRecipients());      
        t.close();
    }
}

pacify ★★★★★
()
Ответ на: комментарий от Legioner

Согласен. Указать локальному MTA арендованный relay - это очень сложно. Это же целых 3 строчки конфига. А может и все 5. Кроме того, надо же еще логин с паролем указать!!! Неподъёмно сложно.

targitaj ★★★★★
() автор топика
Ответ на: комментарий от pacify

t.connect(«smtp.gmail.com», username, password);

обожаю код с пробитыми адресами, логинами и паролями. Няяяяяя!!

targitaj ★★★★★
() автор топика

Может они предыдущим заказчикам так сделали, не переписывать же теперь код из-за того, что у тебя настроено. :)

another ★★★★★
()
Ответ на: комментарий от targitaj

обожаю код с пробитыми адресами, логинами и паролями. Няяяяяя!!

Ну почему же с пробитыми? класс написан конкретно для гмыла, значит сервер легко можно захардкодить. А юзернейм и пароль - переменные, в джаве никаких спецсимволов перед переменными не стоит.

Ок, возвращаясь к вопросу «кроссплатформенности». Не считая венды, нужно оно такое или системной функции достаточно?

Хз. Для меня, как для админа - не нужно, поднять sendmail/postfix/nullmailer - дело двух минут, и все летит туда. А уж как удобнее разрабам - кодить самим или использовать готовое - их дело. Если я сочту, что гонять smtp траффик по 80ому порту - это наркомания, я сообщу об этом своему боссу и моя совесть будет чиста.

l0stparadise ★★★★★
()
Ответ на: комментарий от l0stparadise

Для меня, как для админа - не нужно, поднять sendmail/postfix/nullmailer - дело двух минут, и все летит туда

эта позиция мне близка и понятна.

targitaj ★★★★★
() автор топика
Ответ на: комментарий от orm-i-auga

Есть подозрение, что российские девы так всегда работают. Подгоняя желания заказчика под ранее сделанное. Я был бы очень рад ошибаться.

another ★★★★★
()

Во-первых, стандартный способ слать почту из Java — javamail api. API не особо удобный, но свою задачу решает. Локальным MTA при этом он (из коробки) пользоваться не умеет.

Варианты вызова локального MTA все на практике плохие. «Exec» из толстой JVM делать не хорошо, и такая возможность может быть закрыта политикой безопасности (например при запуске из сервера приложений). Потом опять же это проблемы на пустом месте, так как нужно изобретать обработку ошибок, не напутать с stdout/stderr и т.п. Вызывать какие-то native вызовы тоже не просто и тоже это может быть не доступно.

maxcom ★★★★★
()
Последнее исправление: maxcom (всего исправлений: 1)
Ответ на: комментарий от maxcom

стандартный способ слать почту из Java — javamail api. API не особо удобный, но свою задачу решает. Локальным MTA при этом он (из коробки) пользоваться не умеет

и далее по тексту. Вот тот ответ, который я ждал. Спасибо.

targitaj ★★★★★
() автор топика

На самом деле использовать sendmail(1) для чего-то сложного - то ещё наркоманство, для того чтобы понять это - надо всего-лишь попробовать им попользоваться. Если твой MTA не слушает 25-й порт - ты обязываешь разработчиков пользоваться наркоманским интерфейсом sendmail(1), а если слушает - то им (скорее всего) без разницы, на какой именно smtp сервер посылать письма, и ты чего-то просто не понял.

maloi ★★★★★
()
Ответ на: комментарий от targitaj

php при том, что действующий сайт на php и там прекрасно используется именно системная функция.

внезапно, действующий сайт чем-то не устраивает, если бы ты был ответственным за архитектуру - ты бы почитал её и узнал, почему в ней прописано использование стороннего MTA, а не твоего локального. а т.к. ты всего навсего администратор - твое дело сделать так как сказал архитектор.

maloi ★★★★★
()
Ответ на: комментарий от targitaj

если ты архитектор - то почему разработчики делают не так как ты сказал? сдается мне ты где-то недоговариваешь.

maloi ★★★★★
()
Ответ на: комментарий от maloi

Я не знал как правильно. Теперь знаю.

targitaj ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.