Java发送电子邮件非法分号?

Java发送电子邮件非法分号?,java,arraylist,sendmail,Java,Arraylist,Sendmail,我正试图用java从数据库发送电子邮件。在出于某种原因运行main方法后,出现以下错误: Exception in thread "main" javax.mail.internet.AddressException: Illegal semicolon, not in group in string ``john@gmail.com;eric@gmail.com;carrie@gmail.com;mark@gmail.com;britney@gmail.com'' at position 23

我正试图用java从数据库发送电子邮件。在出于某种原因运行main方法后,出现以下错误:

Exception in thread "main" javax.mail.internet.AddressException: Illegal semicolon, not in group in string ``john@gmail.com;eric@gmail.com;carrie@gmail.com;mark@gmail.com;britney@gmail.com'' 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)
我假设我的数组列表构建错误。这是我的密码:

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("work@gmail.comg", "1234");
                    }
                  });
    }

    public void sendEmail(TestSendEmails s) throws MessagingException{
        init();
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress("work@gmail.com"));
        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);
        }
    }
}
导入java.sql.Connection;
导入java.sql.DriverManager;
导入java.sql.PreparedStatement;
导入java.sql.ResultSet;
导入java.sql.SQLException;
导入java.util.ArrayList;
导入java.util.List;
导入java.util.Properties;
导入javax.mail.Message;
导入javax.mail.MessaginException;
导入javax.mail.PasswordAuthentication;
导入javax.mail.Session;
导入javax.mail.Transport;
导入javax.mail.internet.InternetAddress;
导入javax.mail.internet.mimessage;
公共类TestSend电子邮件{
私有字符串emailTo;
私有字符串主题;
私有字符串正文;
私有字符串电子邮件附件;
公共TestSendEmails(){
}
公共TestSendEmails(字符串emailTo、字符串emailSubject、字符串emailBody、字符串emailAttachments){
超级();
this.emailTo=emailTo;
this.emailSubject=emailSubject;
this.emailBody=emailBody;
this.emailAttachments=电子邮件附件;
}
公共字符串getEmailTo(){
返回电子邮件至;
}
public void setEmailTo(字符串emailTo){
this.emailTo=emailTo;
}
公共字符串getEmailSubject(){
返回电子邮件主题;
}
public void setEmailSubject(字符串emailSubject){
this.emailSubject=emailSubject;
}
公共字符串getEmailBody(){
返回电子邮件正文;
}
public void setEmailBody(字符串emailBody){
this.emailBody=emailBody;
}
公共字符串getEmailAttachments(){
返回电子邮件附件;
}
public void setEmailAttachments(字符串emailAttachments){
this.emailAttachments=电子邮件附件;
}
}
类TestSendEmailD{
私人连接;
私有静态最终字符串GET_EMAILS=“Select*From EMAILS”;
private void connect()抛出实例化异常、IllegaAccessException、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”);
}
公共列表getTestSendEmails()引发异常{
connect();
PreparedStatement ps=con.prepareStatement(获取电子邮件);
结果集rs=ps.executeQuery();
列表结果=新建ArrayList();
while(rs.next()){
添加(新的TestSendEmails(rs.getString(“emailTo”)、rs.getString(“emailSubject”)、rs.getString(“emailBody”)、rs.getString(“emailAttachments”);
}
断开连接();
返回结果;
}
私有void disconnect()引发SQLException{
如果(con!=null){
con.close();
}
}
}
类电子邮件发送者{
非公开会议;
私有void init(){
Properties props=新属性();
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(道具,
新的javax.mail.Authenticator(){
受保护的密码身份验证getPasswordAuthentication(){
返回新密码身份验证(“work@gmail.comg", "1234");
}
});
}
public void sendEmail(TestSendEmails)引发MessaginException{
init();
Message Message=新的mimessage(会话);
message.setFrom(新的InternetAddress(“work@gmail.com"));
message.setRecipients(message.RecipientType.TO,InternetAddress.parse(s.getEmailTo());
message.setSubject(s.getEmailSubject());
message.setText(s.getEmailBody());
传输。发送(消息);
}
public void sendEmail(列出电子邮件)引发MessaginException{
用于(TestSendEmails TestSendEmails:emails){
发送电子邮件(TestSendEmails);
}
}
}
以下是我的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);
    }
}
公共类主{
公共静态void main(字符串[]args)引发异常{
TestSendEmailD dao=新的TestSendEmailD();
List List=dao.getTestSendEmails();
EmailSender=新的EmailSender();
发件人。发送电子邮件(列表);
}
}

有人能帮忙吗?提前感谢。

默认情况下,它使用逗号(
)分隔电子邮件地址,而不是分号(
)进行解析

输出:


发送电子邮件
测试发送电子邮件
?在此处,请提供
emailTo
string。。我想这句话有点问题。我编辑我的问题,你现在可以看到代码了。@moffeltje,我是说
emailTo
的确切值(
emailTo
应该是某个数据库列,并且该列有一些值。)根据例外情况,发件人列表可能没有正确存储。由于在发布我的评论时没有进一步的信息,所以我对其进行了总结。您必须对
InternetAddress.parse()
使用逗号分隔的列表才能正确解析它。
InternetAddress[] parse = InternetAddress.parse("abc@gmail.com,pqr@gmail.com");
System.out.println(parse[0].getAddress());
abc@gmail.com