Я знаю, что на этот вопрос ответили где-то в другом месте, но это не сработало для меня, так вот я.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 класса. но ошибка должна быть в этом.
ummm im not sure thats right ... это дает мне ошибки в eclipse, потому что setText() может иметь только строку, не равную нескольким значениям. – Fallspell
Извините, вы также должны объявить 'сообщение' как MimeMessage, а не просто Message. –
'Message message = new MimeMessage (session);' я объявляю его как MimeMessage .... – Fallspell