java Java发送电子邮件非法分号?
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/31475712/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Java Send Email Illegal semicolon?
提问by espresso_coffee
I'm trying to send emails with java from database. After I run my main method for some reason I'm getting this error:
我正在尝试从数据库中使用 java 发送电子邮件。由于某种原因运行我的主要方法后,我收到此错误:
Exception in thread "main" javax.mail.internet.AddressException: Illegal semicolon, not in group in string ``[email protected];[email protected];[email protected];[email protected];[email protected]'' at position 23
at javax.mail.internet.InternetAddress.parse(InternetAddress.java:929)
at javax.mail.internet.InternetAddress.parse(InternetAddress.java:638)
at javax.mail.internet.InternetAddress.parse(InternetAddress.java:615)
at EmailSender.sendEmail(TestSendEmails.java:120)
at EmailSender.sendEmail(TestSendEmails.java:128)
at Main.main(Main.java:8)
I'm assuming that my array list is built wrong. Here is my code:
我假设我的数组列表构建错误。这是我的代码:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
public class TestSendEmails {
private String emailTo;
private String emailSubject;
private String emailBody;
private String emailAttachments;
public TestSendEmails(){
}
public TestSendEmails(String emailTo, String emailSubject, String emailBody, String emailAttachments){
super();
this.emailTo = emailTo;
this.emailSubject = emailSubject;
this.emailBody = emailBody;
this.emailAttachments = emailAttachments;
}
public String getEmailTo(){
return emailTo;
}
public void setEmailTo(String emailTo){
this.emailTo = emailTo;
}
public String getEmailSubject(){
return emailSubject;
}
public void setEmailSubject(String emailSubject){
this.emailSubject = emailSubject;
}
public String getEmailBody(){
return emailBody;
}
public void setEmailBody(String emailBody){
this.emailBody = emailBody;
}
public String getEmailAttachments(){
return emailAttachments;
}
public void setEmailAttachments(String emailAttachments){
this.emailAttachments = emailAttachments;
}
}
class TestSendEmailD{
private Connection con;
private static final String GET_EMAILS = "Select * From Emails";
private void connect() throws InstantiationException, IllegalAccessException, ClassNotFoundException, SQLException{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
con = DriverManager.getConnection("jdbc:sqlserver://100.000.000.00\SQLEXPRESS:3333;databaseName=dEmails;user=sys;password=admin");
}
public List<TestSendEmails> getTestSendEmails() throws Exception{
connect();
PreparedStatement ps = con.prepareStatement(GET_EMAILS);
ResultSet rs = ps.executeQuery();
List<TestSendEmails> result = new ArrayList<TestSendEmails>();
while(rs.next()){
result.add(new TestSendEmails(rs.getString("emailTo"), rs.getString("emailSubject"),rs.getString("emailBody"),rs.getString("emailAttachments")));
}
disconnect();
return result;
}
private void disconnect() throws SQLException{
if(con != null){
con.close();
}
}
}
class EmailSender{
private Session session;
private void init(){
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", "100.000.000.00");
props.put("mail.smtp.port", "123");
session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("[email protected]", "1234");
}
});
}
public void sendEmail(TestSendEmails s) throws MessagingException{
init();
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress("[email protected]"));
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(s.getEmailTo()));
message.setSubject(s.getEmailSubject());
message.setText(s.getEmailBody());
Transport.send(message);
}
public void sendEmail(List<TestSendEmails> emails) throws MessagingException{
for(TestSendEmails TestSendEmails:emails ){
sendEmail(TestSendEmails);
}
}
}
here is my main.java:
这是我的 main.java:
public class Main {
public static void main(String[] args) throws Exception {
TestSendEmailD dao=new TestSendEmailD();
List<TestSendEmails> list=dao.getTestSendEmails();
EmailSender sender=new EmailSender();
sender.sendEmail(list);
}
}
Can anyone help with this? Thanks in advance.
有人能帮忙吗?提前致谢。
回答by CoderCroc
By default it parse with comma(,
) separated email addresses and not with semicolon (;
),
默认情况下,它使用逗号 ( ,
) 分隔的电子邮件地址而不是分号 ( ;
) 进行解析,
InternetAddress[] parse = InternetAddress.parse("[email protected],[email protected]");
System.out.println(parse[0].getAddress());
OUTPUT:
输出:
[email protected]