我正在解决一个麻烦的问题。我正在使用Gmails API发送消息,在发送消息之前,它在电子邮件底部添加了一个小像素跟踪器。
收件人打开后,它将记录该邮件已打开。
这是我的问题-如果我将其发送给一个人,我可以有效地跟踪那个人打开它的情况。如果我将其发送给很多人,我将无法跟踪打开消息的人,因为像素跟踪器将为所有人提供相同的代码。
这就是我希望可以做到的。诸如MixMax之类的程序可以做到这一点,我不确定它们是如何实现的。
收件人1将其作为其像素:https://track.com/xxxxx/1234
收件人2将其作为其像素:https://track.com/xxxxx/2345
收件人2将其作为其像素:https://track.com/xxxxx/3456
将相同的消息发送给许多用户时如何实现? MixMax如何做到这一点?如果我从Mix发送消息,并且我CC,则所有用户都将显示在抄送框中(但每个用户都有自己的像素),因此我有效地知道他们没有为每个收件人复制消息。
谢谢您的帮助!
答案 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类的自定义实现,我可以使用单个消息而不是两个消息。