Отправить по электронной почте Java - учебник проблема - PullRequest
0 голосов
/ 09 сентября 2011

Я пытаюсь в этом примере отправить электронное письмо с использованием Java.

Мне нужно знать, где в коде используются свойства файла свойств. (показано в примере)? и где это было указано в коде?

Примечание: А также, какие значения я должен заменить в файле свойств, если я собираюсь использовать Google SMTP?

            import java.util.*;
            import java.io.*;
            import javax.mail.*;
            import javax.mail.internet.*;

             /**
            * Simple demonstration of using the javax.mail API.
            *
        * Run from the command line. Please edit the implementation
        * to use correct email addresses and host name.
        */
        public final class Emailer {

          public static void main( String... aArguments ){
            Emailer emailer = new Emailer();
            //the domains of these email addresses should be valid,
            //or the example will fail:
            emailer.sendEmail(
              "fromblah@blah.com", "toblah@blah.com",
               "Testing 1-2-3", "blah blah blah"
            );
           }

          /**
          * Send a single email.
          */
          public void sendEmail(
            String aFromEmailAddr, String aToEmailAddr,
            String aSubject, String aBody
          ){
            //Here, no Authenticator argument is used (it is null).
            //Authenticators are used to prompt the user for user
            //name and password.
            Session session = Session.getDefaultInstance( fMailServerConfig, null );
            MimeMessage message = new MimeMessage( session );
            try {
              //the "from" address may be set in code, or set in the
              //config file under "mail.from" ; here, the latter style is used
              //message.setFrom( new InternetAddress(aFromEmailAddr) );
              message.addRecipient(
                Message.RecipientType.TO, new InternetAddress(aToEmailAddr)
              );
              message.setSubject( aSubject );
              message.setText( aBody );
              Transport.send( message );
            }
            catch (MessagingException ex){
              System.err.println("Cannot send email. " + ex);
            }
          }

          /**
          * Allows the config to be refreshed at runtime, instead of
          * requiring a restart.
          */
          public static void refreshConfig() {
            fMailServerConfig.clear();
            fetchConfig();
          }

          // PRIVATE //

          private static Properties fMailServerConfig = new Properties();

          static {
            fetchConfig();
          }

          /**
          * Open a specific text file containing mail server
          * parameters, and populate a corresponding Properties object.
          */
          private static void fetchConfig() {
            InputStream input = null;
            try {
              //If possible, one should try to avoid hard-coding a path in this
              //manner; in a web application, one should place such a file in
              //WEB-INF, and access it using ServletContext.getResourceAsStream.
              //Another alternative is Class.getResourceAsStream.
              //This file contains the javax.mail config properties mentioned above.
              input = new FileInputStream( "C:\\Temp\\MyMailServer.txt" );
              fMailServerConfig.load( input );
            }
            catch ( IOException ex ){
              System.err.println("Cannot open and load mail server properties file.");
            }
            finally {
              try {
                if ( input != null ) input.close();
              }
              catch ( IOException ex ){
                System.err.println( "Cannot close mail server properties file." );
              }
            }
          }
        } 

Ответы [ 4 ]

0 голосов
/ 21 сентября 2016

Вы можете использовать его без файла свойств.Мой код ниже работает отлично.Используйте его

Просто вызовите эту функцию, чтобы отправить автоматическое письмо клиенту.В параметре «to» указывается адрес электронной почты, на который вы хотите отправить письмо.

Обычно я делаю это в проекте Maven.Если вы используете проект maven, импортируйте следующие зависимости.

<dependency>
    <groupId>javax.mail</groupId>
    <artifactId>mail</artifactId>
    <version>1.4.7</version>
</dependency>

Для прикрепления pdf см. https://www.tutorialspoint.com/java/java_sending_email.htm

private void sendMail(String to, String subject, String emailBody) throws MessagingException{
    final String username = "youremail@gmail.com";
    final String password = "emailPassword";

    Properties props = new Properties();
    props.put("mail.smtp.auth", "true");
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.host", "smtp.gmail.com");
    props.put("mail.smtp.port", "587");

    Session session = Session.getInstance(props,
            new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(username, password);
        }
    });

    try {

        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress("shubham20.yeole@gmail.com"));
        message.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse(to));
        message.setSubject(subject);
        message.setContent(emailBody, "text/html; charset=utf-8");

        Transport.send(message);

        System.out.println("Done");

    } catch (MessagingException e) {
        throw new RuntimeException(e);
    }
}
0 голосов
/ 09 сентября 2011
  private static void fetchConfig() {

открывает FileInputStream, который загружает данные в fMailServerConfig, который определяется как:

  private static Properties fMailServerConfig = new Properties();

Класс свойств отвечает за чтение этого. Он генерирует сообщение с этим кодом:

  Session session = Session.getDefaultInstance( fMailServerConfig, null );
  MimeMessage message = new MimeMessage( session );

Что касается специфики Properties, я не могу сказать, какова цель. Возможно, для примера предоставлено больше кода. Является ли Properties классом фреймворка Java?

0 голосов
/ 09 сентября 2011

Настройте эту строку в fetchConfig () , чтобы загрузить ваши настройки:

input = new FileInputStream( "C:\\Temp\\MyMailServer.txt" );

Прочтите веб-страницу конфигурации Google для второго вопроса ...

Что-то вроде этого работает для меня:

mail.transport.protocol   = smtps
mail.smtp.starttls.enable = true
mail.smtps.port           = 465
mail.smtps.host           = smtp.gmail.com
mail.smtps.auth           = true
0 голосов
/ 09 сентября 2011

Когда класс загружается впервые, выполняется код внутри блока статического инициализатора .

static {
   fetchConfig();
}

Вы увидите, что он вызывает метод fetchConfig(), который затем загружает fMailServerConfig properties.

private static Properties fMailServerConfig = new Properties();

private static void fetchConfig() {
   // ...[omitted stuff]...
   input = new FileInputStream( "C:\\Temp\\MyMailServer.txt" );
   fMailServerConfig.load( input );
   // ...[omitted stuff]...
}

Обратите внимание, что метод fetchConfig() имеет значение static - он вызывается из статического инициализатора, поэтому он должен быть статическим, поскольку на самом деле еще нет экземпляра класса,Кроме того, мы, вероятно, будем использовать одну и ту же конфигурацию для всех экземпляров, поэтому нет необходимости для каждого экземпляра иметь свою собственную конфигурацию.

Также обратите внимание, что метод private, потому что мы не хотим, чтобы методбыть вызванным откуда угодно.

Пакет javax.mail будет знать, какие свойства использовать.mail.host, mail.from и т. д. ( документация javax.mail здесь )

Примечание по использованию Google Gmail для SMTP

Из-за безопасности использование SMTP-сервера Google может быть немного сложным.Откуда Google узнает, что вы не просто какой-то спамер, использующий их в качестве реле?Скорее всего, вам придется сначала пройти проверку подлинности - у них есть пример кода для использования API Google Gmail , который вы можете читать и использовать, но это выходит за рамки простого javax.mail материала.

...