如何获得发送的每封电子邮件的计数
问题描述:
我写了一个由多个发件人(创建于列表中)向一个收件人发送电子邮件的代码。我可以多次迭代该列表。现在我想显示例如列表中每个电子邮件ID的计数。 [email protected] count = 2,[email protected] count = 3。如何获得发送的每封电子邮件的计数
我是一个bigenner。请建议一种方法来做到这一点。下面是 是我的代码发送eamil。
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
{
System.out.println(request.getParameter("toAddress"));
List<File> uploadedFiles= saveUploadedFiles(request);
System.out.println(request.getParameter("email"));
System.out.println("Reached servlet");
response.getWriter().print("Hello"+request.getParameter("email"));
System.out.println("hii"+request.getParts());
//List<File> uploadedFiles= saveUploadedFiles(request);
String toAddress=request.getParameter("toAddress");
String subject=request.getParameter("subject");
String content=request.getParameter("content");
int sleeptime=Integer.parseInt(request.getParameter("emailInterval"));
int noOfEmailToSend=Integer.parseInt(request.getParameter("noOfEmailToSend"));
int iterationInterval=Integer.parseInt(request.getParameter("iterationInterval"));
String resultMessage = ""; //null
HttpSession session = request.getSession(false);
List<String> list = (List<String>) session.getAttribute("name");
System.out.println(list);
List<String> sub=new ArrayList<String>();
for(int i=1;i<=noOfEmailToSend;i++)
{
StringBuilder sb = new StringBuilder();
sb.append(subject).append(i);
sub.add(sb.toString());
}
try {
for(int j=0;j<noOfEmailToSend;j++)
{
Iterator<String> sendersInputIterate = list.iterator();
Iterator<String> subject1 = sub.iterator();
while (sendersInputIterate.hasNext() && subject1.hasNext())
{
EmailFunction.sendEmail(ExchangeIP, port, sendersInputIterate.next(), toAddress, subject1.next(), content, uploadedFiles);
resultMessage = "The B-mail has been sent successfully :";
Thread.sleep(sleeptime);
}
Thread.sleep(iterationInterval);
}
}catch (Exception ex)
{
ex.printStackTrace();
resultMessage = "There were an error: " + ex.getMessage();
} finally
{
request.setAttribute("Message", resultMessage);
getServletContext().getRequestDispatcher("/result.jsp").forward(request, response);
}
}
答
在回答您的评论
可以请你告诉我详细介绍一下使用地图。 https://docs.oracle.com/javase/tutorial/collections/interfaces/map.html
下面是使用地图的一个非常基本的例子来算基于字符串值:
Map接口是由Oracle这里覆盖。请注意,这个例子假定电子邮件是区分大小写的(我相信这应该是,但大多数实现会假设它们不是,我将把它作为一个练习让你了解如何使它们成为案例不区分大小写)
public class EmailCounter {
private Map<String, Integer> destinationEmailCount = new HashMap<>();
public static void main(final String[] args) {
EmailCounter emailCounter = new EmailCounter();
emailCounter.addToMailCount("[email protected]");
emailCounter.addToMailCount("[email protected]");
emailCounter.addToMailCount("[email protected]");
emailCounter.addToMailCount("[email protected]");
System.out.println("[email protected] was mailed " + emailCounter.getEmailCount("[email protected]") + " times");
System.out.println("[email protected] was mailed " + emailCounter.getEmailCount("[email protected]") + " times");
System.out.println("[email protected] was mailed " + emailCounter.getEmailCount("[email protected]") + " times");
}
public void addToMailCount(final String emailAddress) {
Integer existingCount = destinationEmailCount.get(emailAddress);
if (existingCount != null) {
destinationEmailCount.put(emailAddress, Integer.valueOf(existingCount.intValue() + 1));
return;
}
destinationEmailCount.put(emailAddress, Integer.valueOf(1));
}
public int getEmailCount(final String emailAddress) {
Integer count = destinationEmailCount.get(emailAddress);
return count == null ? 0 : count.intValue();
}
}
输出是:
[email protected] was mailed 3 times
[email protected] was mailed 1 times
[email protected] was mailed 0 times
你有没有尝试使用地图? –
no..i使用了数组列表创建发件人ID – Dip
'Map' - key - emailID;价值 - 计数器 –