2016-12-06 8 views
0

Я знаю, что на этот вопрос ответили где-то в другом месте, но это не сработало для меня, так вот я.javax.mail.internet.ParseException: В строке Content-Type <text>, ожидается '/', получил значение null

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

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

В любом случае вот какой-то код.

класс отправитель:

public class Sender { 

public static void send(JTextArea listRecepients, JTextField textSubject, JTextArea textBody, JTextField txtSMTP, 
     JTextField txtEmail, JPasswordField txtPassword, JCheckBox boxHtml, JSpinner ammountSpin, JSpinner timeSpin, JProgressBar progressBar) { 

    String subject = textSubject.getText(); 

    String message = textBody.getText(); 

    for (String line : listRecepients.getText().split("\\n")) setEmails(line, subject, message, txtSMTP, txtEmail, txtPassword, boxHtml, ammountSpin, timeSpin, progressBar); 
} 

private static void setEmails(String line, String subject, String message, JTextField txtSMTP, 
     JTextField txtEmail, JTextField txtPassword, JCheckBox boxHtml, JSpinner ammountSpin, JSpinner timeSpin, JProgressBar progressBar) { 

    List<String> emails = new ArrayList<String>(Arrays.asList(line)); 
    sendEmail(subject, emails, message, txtSMTP, txtEmail, txtPassword, boxHtml, ammountSpin, timeSpin, progressBar); 
} 

public static void sendEmail(final String subject, final List<String> emailToAddresses, 
      final String emailBodyText, JTextField txtSMTP, JTextField txtEmail, JTextField txtPassword, JCheckBox boxHtml, JSpinner ammountSpin, JSpinner timeSpin, JProgressBar progressBar) { 

    final String username = txtEmail.getText(); 

    final String password = txtPassword.getText(); 

    final String smtpHost = txtSMTP.getText(); 

    Properties props = new Properties(); 

    // do not change - start 
    props.put("mail.smtp.user", "username"); 
    props.put("mail.smtp.host", smtpHost); 
    // props.put("mail.debug", "true"); 
    props.put("mail.smtp.auth", "true"); 
    // do not change - end 

    Session session = Session.getInstance(props, 
      new javax.mail.Authenticator() { 
       @Override 
       protected PasswordAuthentication getPasswordAuthentication() { 
        return new PasswordAuthentication(username, password); 
       } 
      }); 
    String emails = null; 
    int ammount, time; 

    try { 
     ammountSpin.commitEdit(); 
    } catch (ParseException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
    ammount = (int) ammountSpin.getValue(); 

    try { 
     timeSpin.commitEdit(); 
    } catch (ParseException e1) { 
     // TODO Auto-generated catch block 
     e1.printStackTrace(); 
    } 
    time = (int) timeSpin.getValue(); 
    time = time*1000; 
    try { 

     Message message = new MimeMessage(session); 

     message.setFrom(new InternetAddress(username)); 

     message.setSubject(subject); 

     if (boxHtml.isSelected() == true){ 
      String content = "<html>\n<body>\n"; 
      content += emailBodyText + "\n"; 
      content += "\n"; 
      content += "</body>\n</html>"; 
      message.setContent(content, "html"); 
     }else{ 
      String content = emailBodyText; 
      message.setContent(content, "text"); 
     } 

     StringBuilder sb = new StringBuilder(); 
     int i = 0; 
     for (String email : emailToAddresses) { 
      sb.append(email); 
      i++; 
      if (emailToAddresses.size() > i) { 
       sb.append(", "); 
      } 
     } 

     emails = sb.toString(); 

     message.setRecipients(Message.RecipientType.BCC, 
       InternetAddress.parse(sb.toString())); 

     System.out.println("Sending Email to " + emails + " from " 
       + username + " with Subject - " + subject); 

     for (int x = 0; x < ammount; x++){ 
      Transport.send(message); 
      try { 
       Thread.sleep(time); 
      } catch (InterruptedException e) { 
       e.printStackTrace(); 
      } 
     } 


     System.out.println("Email successfully sent to " + emails); 

    } catch (MessagingException e) { 
     System.out.println("Email sending failed to " + emails); 
     failed(e); 
    } 
} 
public static void failed (MessagingException e){ 
    JFrame frame = new JFrame("Failed to send"); 
    JOptionPane.showMessageDialog(frame, "The Process has failed with exception code : "+ e, "Warning", JOptionPane.WARNING_MESSAGE); 
} 

}

и да я знаю, что есть более эффективные способы сделать это InstEd отправки требуемых полей через несколько методов, но им лень. вот почему я приехал сюда: p

спасибо за помощь и lmk, если вы хотите другие 3 класса. но ошибка должна быть в этом.

ответ

0

Я понял это, в основном я изменяю значения props.put к этому:

props.put("mail.smtp.starttls.enable", "true"); 
props.put("mail.smtp.host", smtpHost); 
props.put("mail.smtp.user", username); 
props.put("mail.smtp.password", password); 
props.put("mail.smtp.port", smtpPort); 
props.put("mail.smtp.auth", "true"); 

, и она работала. все, что я сделал, это добавить порт. и я также сделал свой gmail доступ к ненадежным приложениям.

0

Замена message.setContent(content, "html") на message.setText(content, null, "html"). Заменить message.setContent(content, "text") с номером message.setText(content).

+0

ummm im not sure thats right ... это дает мне ошибки в eclipse, потому что setText() может иметь только строку, не равную нескольким значениям. – Fallspell

+0

Извините, вы также должны объявить 'сообщение' как MimeMessage, а не просто Message. –

+0

'Message message = new MimeMessage (session);' я объявляю его как MimeMessage .... – Fallspell

0

Ответ Билла, похоже, охватывает его, однако кажется, что вы все еще застряли. Одна из проблем заключается в том, что message.setContent(content, "text"); собирается установить тип контента text/text, если вы хотите test/plain. Вот пример:

public class GMTCZ { 
    public static void main(String[] args) throws Exception, Exception { 
     MimeMessage mime = new MimeMessage((Session) null); 

     mime.setText("That was 1 arg setText"); 
     print(mime); 

     String charset = MimeUtility.mimeCharset(MimeUtility.getDefaultJavaCharset()); 
     mime.setText("<html><title>This is 3 arg setText</title></html>", charset, "html"); 
     print(mime); 

     mime.setText("That was 3 arg setText.", charset, "plain"); 
     print(mime); 

     //OR 

     Message msg = new MimeMessage((Session) null); 
     msg.setContent("<html><title>That was 2 arg setContent</title></html>", "text/html"); 
     print(msg); 

     msg.setContent("That was 2 arg setContent.", "text/plain"); 
     print(msg); 

     msg.setContent("<html><title>That was 2 arg setContent.</title></html>", "text/html"); 
     print(msg); 
    } 

    private static void print(Message msg) throws Exception { 
     msg.saveChanges(); 
     msg.writeTo(System.out); 
     System.out.println(); 
     System.out.println("===="); 
    } 
}