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



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

当收件人打开它时,它将记录邮件已打开。

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

这就是我希望可以做到的。像MixMax这样的程序就是这样做的,我不确定他们是如何做到的。

收件人 1 将此作为他们的像素:https://track.com/xxxxx/1234

收件人 2 得到这个作为他们的像素:https://track.com/xxxxx/2345

收件人 2 将此作为他们的像素:https://track.com/xxxxx/3456

向许多用户发送相同的消息时如何完成此操作?MixMax 是如何做到这一点的?如果我从 Mix 发送消息并抄送多个用户,所有用户都会显示在抄送框中(但每个人都有自己的像素(,所以我有效地知道他们没有为每个收件人复制消息。

感谢您对此的任何帮助!

这只是部分答案,因为我没有使用 Gmail API 或 PHP 的解决方案。但是,如果您有合适的库,这是可行的。我用java(jakarta-mail-1.6.4库(测试了它。诀窍是SMTP不太关心电子邮件中的收件人列表。如果您告诉SMTP服务器仅将具有多个收件人的电子邮件发送给一个收件人,则可以这样做。在SMTP层上,您不指定收件人是TO,CC还是BCC,您甚至可以向不在TO,CC或BCC列表中的某人发送电子邮件。因此,请检查您正在使用的库/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 的消息具有相同的消息 ID 标头,而在我的测试 ID 中是不同的。但是通过可以实现的 MimeMessage 类的自定义实现,我可以使用单个消息而不是两条消息。

最新更新