Java 当用户打开邮件时,如何更改数据表?

Java 当用户打开邮件时,如何更改数据表?,java,jakarta-mail,Java,Jakarta Mail,我已经修改了我的代码,现在我正在发送一个带有内容id的内联图像,其中将生成随机唯一id并存储在数据库中 SMTPMessage message = new SMTPMessage(session); MimeMultipart content = new MimeMultipart("related"); String cid = UUID.randomUUID().toString(); MimeBodyPart text

我已经修改了我的代码,现在我正在发送一个带有内容id的内联图像,其中将生成随机唯一id并存储在数据库中

SMTPMessage message = new SMTPMessage(session);
            MimeMultipart content = new MimeMultipart("related");
            String cid = UUID.randomUUID().toString();
            MimeBodyPart textPart = new MimeBodyPart();            
            message.setFrom(new InternetAddress(user));
            InternetAddress[] recipientAddress = new InternetAddress[recipientList.length];
            int counter = 0;
            for (String recipient : recipientList) {
                recipientAddress[counter] = new InternetAddress(recipient.trim());
                counter++;
            }

            message.setRecipients(Message.RecipientType.BCC, recipientAddress);
            message.setReplyTo(new InternetAddress[]{new InternetAddress("tanisha@boolment.com")});
            message.setSubject("News Letters");
            textPart.addHeader("Disposition-Notification-To", "tanishaa32@gmail.com");
            textPart.setContent("<html>" + body + "</html>", "text/html");
            MimeBodyPart imagePart = new MimeBodyPart();  
            imagePart.setContentID("<img src='teapot.jpg?'" + cid + " width='1px' height='1px'>");
            imagePart.attachFile("C:\\Users\\TANISHA AGARWAL\\Documents\\NetBeansProjects\\EmailMarketing\\build\\web\\resources\\teapot.jpg");
            imagePart.setDisposition(MimeBodyPart.INLINE);
            imagePart.setHeader("Content-Id", cid);
            LOG.info("=========================================" + textPart.getContentID());
            content.addBodyPart(textPart);
            content.addBodyPart(imagePart);
            message.setContent(content);
            Transport.send(message);
            String Status;
            int Delievered;
            int opened;
            int clicked;
            int counters = 0;
            LOG.info("Notify Message is :" + SMTPMessage.NOTIFY_SUCCESS);
            if (SMTPMessage.NOTIFY_SUCCESS == 1) {
                Status = "Sent";
                Delievered = 1;
                opened = 0;
                clicked = 0;
//                for (int i = 0; i > counters; i++) {
//                    Delievered = i;
//                    LOG.info("Delievered: " + Delievered);
//                    counters++;
//                }
            } else {
                LOG.info("------------------------------------");
                Status = "Failed";
                Delievered = 0;
                opened = 0;
                clicked = 0;
            }
SMTPMessage message=新的SMTPMessage(会话);
MimeMultipart内容=新的MimeMultipart(“相关”);
字符串cid=UUID.randomUUID().toString();
MimeBodyPart textPart=新的MimeBodyPart();
message.setFrom(新Internet地址(用户));
InternetAddress[]recipientAddress=新的InternetAddress[recipientList.length];
int计数器=0;
for(字符串收件人:recipientList){
recipientAddress[计数器]=新的Internet地址(recipient.trim());
计数器++;
}
message.setRecipients(message.RecipientType.BCC,recipientAddress);
message.setReplyTo(新InternetAddress[]{new InternetAddress(“tanisha@boolment.com")});
message.setSubject(“新闻信函”);
addHeader(“处置通知到”tanishaa32@gmail.com");
setContent(“+body+”,“text/html”);
MimeBodyPart imagePart=新的MimeBodyPart();
imagePart.setContentID(“”);
imagePart.attachFile(“C:\\Users\\TANISHA AGARWAL\\Documents\\NetBeansProjects\\EmailMarketing\\build\\web\\resources\\teapot.jpg”);
setDisposition(MimeBodyPart.INLINE);
imagePart.setHeader(“内容Id”,cid);
LOG.info(“===========================================”+textPart.getContentID());
content.addBodyPart(textPart);
content.addBodyPart(imagePart);
message.setContent(content);
传输。发送(消息);
字符串状态;
内翻;
int开放;
点击int;
int计数器=0;
LOG.info(“通知消息为:”+SMTPMessage.Notify_SUCCESS);
if(SMTPMessage.NOTIFY_SUCCESS==1){
Status=“已发送”;
Delievered=1;
开放=0;
单击=0;
//对于(int i=0;i>计数器;i++){
//Delievered=i;
//LOG.info(“Delievered:+Delievered”);
//计数器++;
//                }
}否则{
LOG.info(“---------------------------------------”;
Status=“失败”;
Delievered=0;
开放=0;
单击=0;
}
我在数据库中打开了一个列名,最初设置为0,但当用户打开邮件时,我希望该列名应更新为用户打开邮件的次数


请提供帮助。

您需要一个web应用程序来处理对隐藏图像的请求,从URL中提取有关原始邮件的信息,并更新数据库

SMTPMessage message = new SMTPMessage(session);
            MimeMultipart content = new MimeMultipart("related");
            String cid = UUID.randomUUID().toString();
            MimeBodyPart textPart = new MimeBodyPart();            
            message.setFrom(new InternetAddress(user));
            InternetAddress[] recipientAddress = new InternetAddress[recipientList.length];
            int counter = 0;
            for (String recipient : recipientList) {
                recipientAddress[counter] = new InternetAddress(recipient.trim());
                counter++;
            }

            message.setRecipients(Message.RecipientType.BCC, recipientAddress);
            message.setReplyTo(new InternetAddress[]{new InternetAddress("tanisha@boolment.com")});
            message.setSubject("News Letters");
            textPart.addHeader("Disposition-Notification-To", "tanishaa32@gmail.com");
            textPart.setContent("<html>" + body + "</html>", "text/html");
            MimeBodyPart imagePart = new MimeBodyPart();  
            imagePart.setContentID("<img src='teapot.jpg?'" + cid + " width='1px' height='1px'>");
            imagePart.attachFile("C:\\Users\\TANISHA AGARWAL\\Documents\\NetBeansProjects\\EmailMarketing\\build\\web\\resources\\teapot.jpg");
            imagePart.setDisposition(MimeBodyPart.INLINE);
            imagePart.setHeader("Content-Id", cid);
            LOG.info("=========================================" + textPart.getContentID());
            content.addBodyPart(textPart);
            content.addBodyPart(imagePart);
            message.setContent(content);
            Transport.send(message);
            String Status;
            int Delievered;
            int opened;
            int clicked;
            int counters = 0;
            LOG.info("Notify Message is :" + SMTPMessage.NOTIFY_SUCCESS);
            if (SMTPMessage.NOTIFY_SUCCESS == 1) {
                Status = "Sent";
                Delievered = 1;
                opened = 0;
                clicked = 0;
//                for (int i = 0; i > counters; i++) {
//                    Delievered = i;
//                    LOG.info("Delievered: " + Delievered);
//                    counters++;
//                }
            } else {
                LOG.info("------------------------------------");
                Status = "Failed";
                Delievered = 0;
                opened = 0;
                clicked = 0;
            }

请注意,默认情况下,某些邮件不会显示此类图像,因此此方法充其量只是一种近似方法。

什么样的web应用程序??我不知道如何从url中提取信息……当我在日志中打印时,它会提供相同的信息,除了用户已更改为发送邮件的人,收件人已更改为接收邮件的人。例如,servlet。隐藏图像必须位于html正文中。您在上面设置的内容ID将不起任何作用。图像URL指向您的web应用程序,当邮件阅读器试图获取图像以显示它时,会调用该应用程序。您可以在标识原始邮件的图像URL上包含查询参数,这样您就可以在数据库中找到它。好的……我现在已经修改了contentid部分,并用上面生成的cid传递了一个图像名称……那么发送这样的数据是否足够好,如果是yse……我怎么知道gmail收到了cide你不知道gmail什么时候收到它,你知道什么时候有人在邮件阅读器里读到它。您知道,因为邮件阅读器使用您包含的URL获取图像。您知道正在获取URL,因为您编写了响应URL获取的web应用程序。假设我正在给自己发送邮件,并且我已经阅读了该邮件…现在作为开发人员,我如何知道打开邮件后已获取cid…并且我没有在数据库中存储任何cid。