簡體   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