繁体   English   中英

Spring Java Mail-如何知道发送邮件被接收者读取,退回或转发?

[英]Spring Java Mail - How to know send mail be read, bounce or forward by receiver?

我是Spring和Java邮件的新手,我是否可以知道Java邮件发送的电子邮件是如何读取,退回或转发的。 我用谷歌搜索只找到了如何发送邮件的方式。 任何人都知道在哪里可以得到参考或为我提供一些示例?

谢谢。

下面是我的代码用spring java mail发送邮件:

弹簧Mail.xml

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="smtp.gmail.com" />
    <property name="port" value="587" />
    <property name="username" value="xxxxxxxx@gmail.com" />
    <property name="password" value="xxxxxx" />

    <property name="javaMailProperties">
       <props>
              <prop key="mail.smtp.auth">true</prop>
              <prop key="mail.smtp.starttls.enable">true</prop>
              <prop key="mail.smtp.from">xxxxxxxx@hotmail.com</prop>
           </props>
    </property>
</bean>

<bean id="mailMail" class="com.penril.my.MailMail">
    <property name="mailSender" ref="mailSender" />
</bean>

</beans>

MailMail.java

public class MailMail
{
    private JavaMailSender mailSender;

    public void setMailSender(JavaMailSender mailSender) {
        this.mailSender = mailSender;
    }

    public void sendMail(String from, String to, String subject, String msg) {

        MimeMessage message = mailSender.createMimeMessage();

        try {
            MimeMessageHelper helper = new MimeMessageHelper(message, true);

            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(msg);

            mailSender.send(message);

        } catch (MessagingException e) {
            throw new MailParseException(e);
        }
    }
}

MainClass.java

public class MainClass
{
    public static void main( String[] args )
    {
        ApplicationContext context = 
             new ClassPathXmlApplicationContext("Spring-Mail.xml");

        MailMail mm = (MailMail) context.getBean("mailMail");
        mm.sendMail("xxx123xxx@gmail.com",
               "xxx234xxx@hotmail.co1m",
               "Testing123", 
               "Testing only \n\n Hello Spring Email Sender");

    }
}

没有任何一种标准的方法可以被广泛接受和尊重。 我看到您有一些选择,但是:

添加标头“ Return-Receipt-To”,并在该值中包含您的电子邮件地址。 如果电子邮件的收件人有接受此标头的客户,则在打开电子邮件时会向您发送退回收据。 请注意,这是不可靠的,因为即使用户有支持收据的用户也可以始终决定不发送收据。

将图像添加到从服务器加载的电子邮件中,并在图像上放置一个参数,其中包含用户的电子邮件地址。 加载电子邮件后,图像将从服务器上加载。 编写一个脚本,该脚本收集电子邮件参数,然后传递空白图像。 但是,这也不可靠,因为许多邮件客户端会提示用户是否要下载图像,并且始终可以选择不这样做。 另外,某些(大多数是较旧的)电子邮件客户端不支持图像。

也许最可靠的方法是根本不将邮件包含在电子邮件中。 仅包含指向可以阅读邮件的网站的链接,并在链接中包含其电子邮件地址或唯一代码。 这样,您可以确切地知道谁在阅读邮件。 当然,这样做的缺点是人们实际上并没有在收件箱中收到消息,他们也可能选择不去网站阅读消息。

最终,除非您乐于获得不合格的结果,否则我认为您将不得不想出一个有创意的解决方案来解决此问题。

注册一个基于云的SMTP服务的免费帐户,例如Sendgrid,这将为您省去手动实施上一个答案中建议的麻烦。

https://sendgrid.com/

您可以每天免费发送400封电子邮件。 您可以使用管理控制台手动检查单个消息“已打开”,“退回”等的状态,也可以使用各种AP​​I以编程方式执行此操作(尽管某些API仅适用于付费层)。

例如,当事件(打开,退回,单击等)发生时,他们的WebHooks API将回调您的服务器:

https://sendgrid.com/docs/API_Reference/Webhooks/event.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM