Gmail API CC很多人,但在底部添加了不同的像素跟踪器

时间:2018-10-05 16:42:12

标签: php gmail-api

我正在解决一个麻烦的问题。我正在使用Gmails API发送消息,在发送消息之前,它在电子邮件底部添加了一个小像素跟踪器。

收件人打开后,它将记录该邮件已打开。

这是我的问题-如果我将其发送给一个人,我可以有效地跟踪那个人打开它的情况。如果我将其发送给很多人,我将无法跟踪打开消息的人,因为像素跟踪器将为所有人提供相同的代码。

这就是我希望可以做到的。诸如MixMax之类的程序可以做到这一点,我不确定它们是如何实现的。

收件人1将其作为其像素:https://track.com/xxxxx/1234

收件人2将其作为其像素:https://track.com/xxxxx/2345

收件人2将其作为其像素:https://track.com/xxxxx/3456

将相同的消息发送给许多用户时如何实现? MixMax如何做到这一点?如果我从Mix发送消息,并且我CC,则所有用户都将显示在抄送框中(但每个用户都有自己的像素),因此我有效地知道他们没有为每个收件人复制消息。

谢谢您的帮助!

1 个答案:

答案 0 :(得分:0)

这只是部分答案,因为我没有使用Gmail API或PHP的解决方案。但是,如果您拥有正确的库,这是可行的。我使用Java(jakarta-mail-1.6.4库)对其进行了测试。窍门是SMTP不太关心电子邮件中的收件人列表。 如果您告诉SMTP服务器将多个收件人的电子邮件发送给一个收件人,则只能这样做。在SMTP层上,您无需指定收件人是TO,CC还是BCC,甚至可以将电子邮件发送给不在TO,CC或BCC列表中。因此,请检查您正在使用的库/ API,如果它不可行,则说明该任务的库/ API太高。

这是我在Java中的测试。基本上,我创建了两个都有两个收件人的电子邮件,但是后来我告诉SMTP服务器仅将每个邮件发送给一个收件人。我用TO,CC和BCC的各种组合对其进行了测试,并且都可以使用。

import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;

import javax.mail.Address;
import javax.mail.Message.RecipientType;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import com.sun.mail.smtp.SMTPTransport;

public static void main(String[] args) throws IOException, MessagingException {
        final Properties smtpInfo = getSmtpInfo();
        final String user = smtpInfo.getProperty("mail.smtp.user");
        final String password = smtpInfo.getProperty("mail.smtp.password");
        final Address[] gmailOnly = new Address[] {MY_GMAIL_ADDRESS};
        final Address[] hotmailOnly = new Address[] {MY_HOTMAIL_ADDRESS};

        Session session = Session.getInstance(smtpInfo);
        //create email messages, they have all recipients but different content
        MimeMessage gmailMessage = prepareMessage(session, user, "Custom TP for my GMAIL");
        MimeMessage hotmailMessage = prepareMessage(session, user, "Custom TP for my HOTMAIL");

        try (SMTPTransport transport = (SMTPTransport) session.getTransport("smtp")) {
            transport.connect(user, password);
            //now send message but to only one recipient
            transport.sendMessage(gmailMessage, gmailOnly);
            transport.sendMessage(hotmailMessage, hotmailOnly);
        }
    }

    private static MimeMessage prepareMessage(Session session, String from, String text) throws MessagingException {
        MimeMessage msg = new MimeMessage(session);
        msg.setFrom(from);
        msg.setSubject(text);
        msg.addRecipient(RecipientType.TO, MY_GMAIL_ADDRESS);
        msg.addRecipient(RecipientType.TO, MY_HOTMAIL_ADDRESS);
        msg.setText(text);
        return msg;
    }

MixMax的实现更为复杂。来自MixMax的消息具有相同的Message-Id标头,而我的测试ID不同。但是通过实现MimeMessage类的自定义实现,我可以使用单个消息而不是两个消息。