необходимо отправить уведомление по электронной почте пользователю о проекте Java - PullRequest
1 голос
/ 06 декабря 2011

Так что я работаю над проектом класса (все учащиеся в классе) (у меня не будет контроля над сервером, установочными материалами и т. Д.), Есть ли способ отправить электронное письмо, не зная о системе,проект будет развернут? (я не собираюсь участвовать в этом процессе, поэтому я не могу запускать какие-либо сценарии на сервере) Мы работаем над Java и у нас есть среда Spring для работы. Могу ли яиспользовать предварительно скомпилированный jar? (я что-то об этом слышал, не уверен)

Я пытаюсь получить образцы с помощью javamail, но не могу проверить это на своем компьютере .. У меня включен localhost и работает, но это не работает, и я не могу найти учебник, который проведет меня через все шаги по настройке компьютера и заставить работать код [im on mac])

Ответы [ 4 ]

1 голос
/ 06 декабря 2011

Что ж, если вы хотите проверить работоспособность почты с помощью java mail, вы можете использовать любого провайдера электронной почты, например gmail и т. Д., Так как он обеспечивает отказ почты SMTP.

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

Делай что-нибудь вроде

String host = "smtp.gmail.com";
 String from = "username";
 String pass = "password";
Propertindexes props = System.getPropertindexes();
props.put("maindexl.smtp.starttls.enable", "true"); 
props.put("maindexl.smtp.host", host);
props.put("maindexl.smtp.user", from);
props.put("maindexl.smtp.password", pass);
props.put("maindexl.smtp.port", "587");
props.put("maindexl.smtp.auth", "true");

String[] to = {"to@gmaindexl.com"}; 

Sessindexon sessindexon = Sessindexon.getDefaultindexnstance(props, null);
MindexmeMessage message = new MindexmeMessage(sessindexon);
message.setFrom(new indexnternetAddress(from));

indexnternetAddress[] toAddress = new indexnternetAddress[to.length];


for( int index=0; index < to.length; index++ ) { 
    toAddress[index] = new indexnternetAddress(to[index]);
}
System.out.prindexntln(Message.RecindexpindexentType.TO);

for( int index=0; index < toAddress.length; index++) { 
    message.addRecindexpindexent(Message.RecindexpindexentType.TO, toAddress[index]);
}
message.setSubject("hello Maindexl");
message.setText("Hello");
Transport transport = sessindexon.getTransport("smtp");
transport.connect(host, from, pass);
transport.sendMessage(message, message.getAllRecindexpindexents());
transport.close();

Хотя я не проверял код, но он должен работать

0 голосов
/ 06 декабря 2011
public static int enviarCorreo(int puerto,String serverPrograma, String mailPrograma, String passMailPrograma, String info, String subject, String emailDestinatario, String ubicacionAdjunto1, String ubicacionAdjunto2, String nomAdjunto1, String nomAdjunto2) {
            int err=0;

             boolean conArchAdjunto1=true;
             boolean conArchAdjunto2=true;
            if(ubicacionAdjunto1.equals("")){
                conArchAdjunto1=false;
            }
            if(ubicacionAdjunto2.equals("")){
                conArchAdjunto2=false;
            }


            try {
                // obtaining the session, this configuration is for
                // a gmail account
                Properties props = new Properties();
                props.put("mail.smtp.host", serverPrograma);
                props.setProperty("mail.smtp.starttls.enable", "true");
                props.setProperty("mail.smtp.port", puerto);//587
                props.setProperty("mail.smtp.user", mailPrograma);
                props.setProperty("mail.smtp.auth", "true");

                Session session = Session.getDefaultInstance(props, null);
                // session.setDebug(true);

                // composing the text
                BodyPart texto = new MimeBodyPart();
                texto.setText(info);

                // multipart for text and images
                MimeMultipart multiParte = new MimeMultipart();

                // composing the att

                if (conArchAdjunto1) {
                    BodyPart adjunto1 = new MimeBodyPart();
                    adjunto1.setDataHandler(new DataHandler(new FileDataSource(ubicacionAdjunto1)));
                    adjunto1.setFileName(nomAdjunto1);
                    multiParte.addBodyPart(adjunto1);
                }
                if (conArchAdjunto2) {
                    BodyPart adjunto2 = new MimeBodyPart();
                    adjunto2.setDataHandler(new DataHandler(new FileDataSource(ubicacionAdjunto2)));
                    adjunto2.setFileName(nomAdjunto2);
                    multiParte.addBodyPart(adjunto2);
                }
                multiParte.addBodyPart(texto);

                // composing mail, to, from, subject and
                // content.
                MimeMessage message = new MimeMessage(session);
                message.setFrom(new InternetAddress(mailPrograma));

                message.addRecipient(Message.RecipientType.TO, new InternetAddress(
                        emailDestinatario));
                message.setSubject(subject);
                message.setContent(multiParte);


                message.addRecipient(Message.RecipientType.BCC,
                        new InternetAddress(mailPrograma));
                message.setSubject(subject);
                message.setContent(multiParte);

                // Se envia el correo.
                Transport t = session.getTransport("smtp");
                t.connect(mailPrograma, passMailPrograma);
                t.sendMessage(message, message.getAllRecipients());
                t.close();
                log.info("Clase EnviarMail, metodo enviarCorreo: Mail sended");
            } catch (Exception e) {
                err=-1;
                log.error("Clase EnviarMail, metodo enviarCorreo: " +e.getMessage());
            }
            return err;
        }

Я использую этот код и отлично работает, не забудьте импортировать javax.mail , и другой совет, что некоторые свойства, такие как mailPrograma (почта, которую вы хотите отправить по электронной почте), могут быть настроены в .properties с пропуском и некоторым избыточным кодом, который вы хотите изменить позже ...

0 голосов
/ 06 декабря 2011

Вы говорили с вашим инструктором об этом? Кажется странным, что вы не будете знать среду развертывания, но вам придется отправлять почту через нее. Тем не менее, есть некоторые решения, которые проще, чем настройка вашего собственного почтового сервера (который может не одобрить ваш провайдер), и могут работать в вашей целевой среде в зависимости от того, как подключена сеть (например, брандмауэр):

  1. Используйте внешний сервис, такой как GMail. Вот пример отправки почты через GMail с использованием JavaMail.

  2. Используйте почтовый сервер вашего провайдера. JavaMail API имеет простой пример, и если вы загрузите весь пакет , есть много примеров (включая использование других провайдеров веб-почты, таких как Windows Live Mail (также известная как Hotmail)). Не забудьте посмотреть FAQ .

  3. Если вы обнаружите, что вам нужно включить свой собственный почтовый сервер, у Rose India есть обзор JavaMail , который включает этот шаг. Они ссылаются на Apache James , почтовый сервер корпоративного уровня, который может быть немного больше для того, что вам нужно.

Я бы рекомендовал сначала обсудить это с вашим инструктором ... это может избавить вас от многих головных болей.

0 голосов
/ 06 декабря 2011

Вам не нужен почтовый сервер для отправки электронных писем.

Вы проверили, как Apache Commons Email может помочь вам в этом?

http://commons.apache.org/email/

Вы можете использовать свою собственную учетную запись GMAIL для рассылки таких электронных писем в не критических случаях.: D

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...