我可以发送特定电子邮件ID的电子邮件,但现在我想从数据库中检索多个用户的电子邮件ID并向他们发送消息。我尝试了几种方法,但我无法得到理想的结果。
这是我的原始代码:
NS ns1.myhost.arvixevps.com
NS ns2.myhost.arvixevps.com
A <ipaddress>
* A <ipaddress>
www A <ipaddress>
mail A <ipaddress>
mail2 A <ipaddress>
MX [10], mail.mywebsite.com
MX [21], mail2.mywebsite.com
TXT globalsign-domain-verification=SKFHKSJHDLKUERIJKDCFJLKF_234KJFDJK
答案 0 :(得分:0)
有3个问题:
首先,您的i
永远不会增加。您需要在循环结束时添加i++;
。您现在的方式是循环查看数据库查询的所有结果,但始终保存在id[0]
。
此外,将rs.getString(1)
替换为rs.getString(0)
。这是因为email
是数据库查询结果的第0列,而不是1。
最后,在您的代码中,当您最后收集电子邮件地址时,您只捕获一个,因为您不会在i
上循环。您应该循环访问id
数组,并为每封电子邮件创建一个InternetAddress
对象。
总的来说,您需要做的是通过以下方式替换您的while循环:
while(rs.next())
{
id[i] = rs.getString(0);
i++;
}
并将InternetAddress[] address = {new InternetAddress(id[i])};
替换为:
InternetAddress[] address = new InternetAddress[id.length];
for(int i=0; i<id.length; i++){
address[i] = new InternetAddress[id[i]];
}
那说,它应该工作。现在,关于您的代码的一些评论:
id
初始化?如果您这样做,您将无法处理超过100个电子邮件地址的案例。您可能需要使用ArrayList而不是数组。请参阅here ResultSet
转移到数组,只需使用ResultSet
的{{3}} 您无需像这样添加任何%><%
:
%>
<%
这没用了
host
,user
和pass
为空,只是为了稍后填写几行总的来说,如果您实施这些注释和重要更改,您的代码将如下所示:
<%@page import="oracle.net.aso.i"%>
<%@ page import="java.io.*,java.util.*,javax.mail.*,java.sql.*"%>
<%@ page import="javax.mail.internet.*,javax.activation.*"%>
<%@ page import="javax.servlet.http.*,javax.servlet.*" %>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<%!
Connection con;
Statement st;
ResultSet rs;
Class.forName("oracle.jdbc.OracleDriver");
con = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE", "rahul", "odeya");
st = con.createStatement();
rs = st.executeQuery("select email from register");
String[] id = rs.getArray("email");
String host ="smtp.gmail.com";
String user ="ocrsindore@gmail.com";
String pass ="odeya";
String SSL_FACTORY = "javax.net.ssl.SSLSocketFactory";
String from ="ocrsindore@gmail.com";
String subject = request.getParameter("subject");
String messageText = request.getParameter("message");
boolean sessionDebug = true;
Properties props = System.getProperties();
props.put("mail.host", host);
props.put("mail.transport.protocol.", "smtp");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.", "true");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.socketFactory.fallback", "false");
props.put("mail.smtp.socketFactory.class", SSL_FACTORY);
Session mailSession = Session.getDefaultInstance(props, null);
mailSession.setDebug(sessionDebug);
Message msg = new MimeMessage(mailSession);
msg.setFrom(new InternetAddress(from));
InternetAddress[] address = new InternetAddress[id.length];
for(int i=0; i<id.length; i++){
address[i] = new InternetAddress[id[i]];
}
msg.setRecipients(Message.RecipientType.TO, address);
msg.setSubject(subject);
msg.setContent(messageText, "text/html");
Transport transport = mailSession.getTransport("smtp");
transport.connect(host, from, pass);
try {
transport.sendMessage(msg, msg.getAllRecipients());
out.println("message successfully sent");
}
catch (Exception err) {
out.println("message send failed");
}
transport.close();
%>
<jsp:include page="adminis.html"/>