2013-11-23 4 views
2

Я загрузил тестовую html-страницу и сервлет после this article точно. Это работает и отправит мне электронное письмо. Однако, когда я копирую этот код почти точно в свой метод SendEmail в приведенном ниже коде, он не отправляет электронное письмо. Я знаю, когда я запускаю это локально, что он отлично подходит к методу SendEmail (но вы не можете отправлять электронные письма с использованием сервера разработки в GAE). Когда я его развертываю, на странице или в журналах нет ошибок, поэтому простой старый выглядит так, будто он просто не отправляет электронное письмо. Кто-нибудь видит причину?Почему мой проект движка Google не отправляет электронное письмо?

public class EmailService { 
    private static SimpleDateFormat dateFormatter = new SimpleDateFormat ("MM/dd/yyyy"); 

    public static void SendDeadlineEmails() { 
     PersistenceManager pm = getPersistenceManager(); 
     try { 
      List<DeadlineEmailObject> studentsWithDeadlineToday = populateEmailList(pm); 
      sendEmails(studentsWithDeadlineToday); 
     } finally { 
      pm.close(); 
     } 
    } 

    private static List<DeadlineEmailObject> populateEmailList(PersistenceManager pm) { 
     List<Student> students = getStudents(pm); 
     List<DeadlineEmailObject> studentsWithDeadlineToday = new ArrayList<DeadlineEmailObject>(); 
     String today = dateFormatter.format(System.currentTimeMillis()); 

     for(Student student : students) { 
      Set<Charge> charges = student.getCharges(); 
      if(charges != null) { 
       for(Charge charge : charges) { 
        String deadline = dateFormatter.format(charge.getDeadline()); 
        if(deadline.equals(today)) { 
         studentsWithDeadlineToday.add(new DeadlineEmailObject(student, charge)); 
        } 
       } 
      } 
     } 
     return studentsWithDeadlineToday; 
    } 

    @SuppressWarnings("unchecked") 
    private static List<Student> getStudents(PersistenceManager pm) { 
     return (List<Student>) pm.newQuery(Student.class).execute(); 
    } 

    private static void sendEmails(List<DeadlineEmailObject> studentsWithDeadlineToday) { 
     for(DeadlineEmailObject emailObj : studentsWithDeadlineToday) { 
      sendEmail(emailObj); 
      System.out.println("Student: " + emailObj.getStudent().getFullName() + "\nAmount: " + emailObj.getCharge().getAmount() + 
        "\nDeadline: " + dateFormatter.format(emailObj.getCharge().getDeadline())); 
     } 
    } 

    private static void sendEmail(DeadlineEmailObject emailObj) { 
     Properties props = new Properties(); 
     Session session = Session.getDefaultInstance(props, null); 
     try { 
      Message msg = new MimeMessage(session); 
      msg.setFrom(new InternetAddress("[email protected]", "Admin")); 
      msg.addRecipient(Message.RecipientType.TO, new InternetAddress(emailObj.getStudent().getEmail(), emailObj.getStudent().getFullName())); 
      msg.setSubject("Deadline Reached"); 
      msg.setText(buildMessage(emailObj)); 
      Transport.send(msg); 
     } catch (Exception e) { 
      throw new RuntimeException(e); 
     } 
    } 

    private static String buildMessage(DeadlineEmailObject emailObj) { 
     String email = ""; 
     email += "Dear " + emailObj.getStudent().getFullName() + " ,\n"; 
     email += "You owe us money. This much: $" + emailObj.getCharge().getAmount() + ".\n"; 
     email += "For this reason: " + emailObj.getCharge().getReason() + ".\n"; 
     email += "The deadline is today and I advise you to pay it or you will be deported to Idontpaymybills Island forever.\n"; 
     email += "Thank you,\n Automated Emailer"; 
     return email; 
    } 

    private static PersistenceManager getPersistenceManager() { 
     return JDOHelper.getPersistenceManagerFactory("transactions-optional").getPersistenceManager(); 
    } 
} 
+0

Откуда вы знаете, что он не отправляет ** e-mail? –

+1

Ну, я предполагал, потому что я отправляю его себе, и я его не получаю. – Nick

+0

Вы проверили папку ** spam **? –

ответ

1

Изменить вызов setFrom() использовать адрес электронной почты, разрешенный в Developers Guide:

Чтобы установить адрес отправителя, приложение вызывает метод setFrom() на объекте MimeMessage. Адрес отправителя должен быть один из следующих типов :

  • адрес зарегистрированного администратора для приложения
  • адреса пользователя для текущего запроса, подписанного с помощью аккаунта Google. Вы можете определить адрес электронной почты текущего пользователя в API-интерфейсе пользователей. Учетная запись пользователя должна быть учетной записью Gmail или находиться в домене, управляемом Google Apps.
  • Любой действительный почтовый адрес для приложения (например, [email protected]).
+1

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

Смежные вопросы