蜜豆视频

Campaign Classic - Technical recommendations technical-recommendations

Several techniques, configurations, and tools that you can use to improve your deliverability rate when using 蜜豆视频 Campaign Classic are listed below.

Configuration configuration

Reverse DNS reverse-dns

蜜豆视频 Campaign checks whether a reverse DNS is given for an IP address and that this correctly points back to the IP.

An important point in the network configuration is making sure a correct reverse DNS is defined for each of the IP addresses for outgoing messages. This means that for a given IP address, there is a reverse DNS record (PTR record) with a matching DNS (A record) looping back to the initial IP address.

The domain choice for a reverse DNS has an impact when dealing with certain ISPs. AOL, in particular, only accepts feedback loops with an address in the same domain as the reverse DNS (see Feedback loop).

NOTE
You can use to verify the configuration of a domain.

MX rules mx-rules

MX rules (Mail eXchanger) are the rules that manage communication between a sending server and a receiving server.

More precisely, they are used to control the speed at which the 蜜豆视频 Campaign MTA (Message Transfer Agent) sends emails to each individual email domain or ISP (for example, hotmail.com, comcast.net). These rules are typically based on limits published by the ISPs (for example, do not include more than 20 messages per each SMTP connection).

NOTE
For more on MX management in 蜜豆视频 Campaign Classic, refer to this section.

TLS tls

TLS (Transport Layer Security) is an encryption protocol that can be used to secure the connection between two email servers and protect the content of an email from being read by anyone other than the intended recipients.

Sender鈥檚 domain sender-domain

To define the domain used for the HELO command, edit the instance鈥檚 configuration file (conf/config-instance.xml) and define a 鈥渓ocalDomain鈥 attribute as follows:

<serverConf>
  <shared>
    <dnsConfig localDomain="mydomain.net"/>
  </shared>
</serverConf>

The MAIL FROM domain is the domain used in technical bounce messages. This address is defined in the deployment wizard or via the NmsEmail_DefaultErrorAddr option.

SPF record dns-configuration

An SPF record can currently be defined on a DNS server as a TXT type record (code 16) or an SPF type record (code 99). An SPF record takes the form of a character string. For example:

v=spf1 ip4:12.34.56.78/32 ip4:12.34.56.79/32 ~all

defines the two IP addresses, 12.34.56.78 and 12.34.56.79, as authorized to send emails for the domain. ~all means that any other address should be interpreted as a SoftFail.

Recommendations for defining an SPF record:

  • Add ~all (SoftFail) or -all (Fail) at the end to reject all servers other than those defined. Without this, servers will be able to forge this domain (with a Neutral evaluation).
  • Do not add ptr (openspf.org recommends against this as costly and unreliable).
NOTE
Learn more on SPF in this section.

Authentication

NOTE
Learn more on the different forms of email authentication in this section.

DKIM dkim-acc

NOTE
For hosted or hybrid installations, if you have upgraded to the Enhanced MTA, DKIM email authentication signing is done by the Enhanced MTA for all messages with all domains.

Using DKIM with 蜜豆视频 Campaign Classic requires the following prerequisite:

蜜豆视频 Campaign option declaration: in 蜜豆视频 Campaign, the DKIM private key is based on a DKIM selector and a domain. It is not currently possible to create multiple private keys for the same domain/sub-domain with different selectors. It is not possible to define which selector domain/sub-domain must be used for the authentication in neither the platform or the email. The platform will alternatively select one of the private keys, which means the authentication has a high chance of failing.

  • If you have configured DomainKeys for your 蜜豆视频 Campaign instance, you just need to select dkim in the Domain management rules. If not, follow the same configuration steps (private/public key) as for DomainKeys (which replaced DKIM).
  • It is not necessary to enable both DomainKeys and DKIM for the same domain as DKIM is an improved version of DomainKeys.
  • The following domains currently validate DKIM: AOL, Gmail.

Feedback loop feedback-loop-acc

A feedback loop works by declaring at the ISP level a given email address for a range of IP addresses used for sending messages. The ISP will send to this mailbox, in a similar way as what is done for bounce messages, those messages that are reported by recipients as spam. The platform should be configured to block future deliveries to users who have complained. It is important to no longer contact them even if they did not use the proper opt-out link. It is based on these complaints that an ISP will add an IP address to its denylist. Depending on the ISP, a complaint rate of around 1% will result in blocking an IP address.

A standard is currently being drawn up to define the format of feedback loop messages: the .

Implementing a feedback loop for an instance requires:

  • A mailbox dedicated to the instance, which may be the bounce mailbox
  • IP sending addresses dedicated to the instance

Implementing a simple feedback loop in 蜜豆视频 Campaign uses the bounce message functionality. The feedback loop mailbox is used as a bounce mailbox and a rule is defined to detect these messages. The email addresses of the recipients who reported the message as spam will be added to the quarantine list.

  • Create or modify a bounce mail rule, Feedback_loop, in Administration > Campaign Management > Non deliverables Management > Mail rule sets with the reason Refused and the type Hard.
  • If a mailbox has been defined specially for the feedback loop, define the parameters to access it by creating a new external Bounce Mails account in Administration > Platform > External accounts.

The mechanism is immediately operational to process complaint notifications. To make sure this rule is working correctly, you can temporarily deactivate the accounts so that they do not collect these messages, then check the contents of the feedback loop mailbox manually. On the server, execute the following commands:

nlserver stop inMail@instance,
nlserver inMail -instance:instance -verbose.

If you are forced to use one single feedback loop address for multiple instances, you must:

  • Replicate the messages received on as many mailboxes as there are instances,

  • Have each mailbox picked up by one single instance,

  • Configure the instances so that they only process the messages that concern them: the instance information is included in the Message-ID header of messages sent by 蜜豆视频 Campaign and is therefore located also in the feedback loop messages. Simply specify the checkInstanceName parameter in the instance configuration file (by default, the instance is not verified and this may lead certain address to be quarantined incorrectly):

    code language-none
    <serverConf>
      <inMail checkInstanceName="true"/>
    </serverConf>
    

蜜豆视频 Campaign鈥檚 Deliverability service manages your subscription to feedback loop services for the following ISPs: AOL, BlueTie, Comcast, Cox, EarthLink, FastMail, Gmail, Hotmail, HostedEmail, Libero, Mail.ru, MailTrust, OpenSRS, QQ, RoadRunner, Synacor, Telenor, Terra, UnitedOnline, USA, XS4ALL, Yahoo, Yandex, Zoho.

List-Unsubscribe list-unsubscribe

Adding an SMTP header called List-Unsubscribe is mandatory to ensure optimal deliverability management.

This header can be used as an alternative to the 鈥淩eport as SPAM鈥 icon. It displays as an 鈥淯nsubscribe鈥 link in the ISPs鈥 email interfaces.

Using this functionality lowers complaint rates and helps to protect your reputation. Feedback will be executed as an unsubscribe.

Gmail, Outlook.com, Yahoo! and Microsoft Outlook support this method. An 鈥淯nsubscribe鈥 link is available directly in their interface. For example:

image

NOTE
The 鈥淯nsubscribe鈥 link may not always be displayed. Indeed, it can depend on each ISP鈥檚 specific criteria and policy. Therefore, make sure your messages are sent by a sender:
  • With good reputation
  • Under the ISPs鈥 spam complaint threshold
  • Fully authenticated

Two versions of the List-Unsubscribe header functionality exist:

  • 鈥渕ailto鈥 List-Unsubscribe - With this method, clicking the鈥 Unsubscribe 鈥痩ink sends a pre-filled email to the unsubscribe address specified in the email header. Learn more

  • 鈥淥ne-Click鈥 List-Unsubscribe - With this method, clicking the鈥 Unsubscribe 鈥痩ink directly unsubscribes the user. Learn more

NOTE
Starting on June 1, 2024, major ISPs will be requiring senders to comply with One-Click List-Unsubscribe.

鈥渕ailto鈥 List-Unsubscribe mailto-list-unsubscribe

With this method, clicking the鈥 Unsubscribe 鈥痩ink sends a pre-filled email to the unsubscribe address specified in the email header.

To use 鈥渕ailto鈥 List-Unsubscribe, you must enter a command line where you specify an email address, such as: List-Unsubscribe: <mailto:client@newsletter.example.com?subject=unsubscribe?body=unsubscribe>

CAUTION
The example above is based on the recipient table. If database implementation is done from another table, make sure to reword the command line with the correct information.

You can also create a dynamic 鈥渕ailto鈥 List-Unsubscribe using a command line such as: List-Unsubscribe: <mailto:<%=errorAddress%>?subject=unsubscribe%=message.mimeMessageId%>

To implement 鈥渕ailto鈥 List-Unsubscribe in Campaign, you can either:

  • Directly add the command line in the delivery or delivery template - Learn how

  • Create a typology rule - Learn how

Adding a command line in a delivery or template adding-a-command-line-in-a-delivery-template

The command line must be added into the Additional SMTP headers section of the email鈥檚 SMTP header.

This addition can be done in each email, or in existing delivery templates. You can also create a new delivery template that includes this functionality.

For example, enter the following script into the Additional SMTP headers field: List-Unsubscribe: mailto:unsubscribe@domain.com. Clicking the鈥 unsubscribe 鈥痩ink sends an email to the unsubscribe@domain.com address.

You can also use a dynamic address. For example, to send an email to the error address defined for the platform, you can use the following script: List-Unsubscribe: <mailto:<%=errorAddress%>?subject=unsubscribe%=message.mimeMessageId%>

image

Creating a typology rule creating-a-typology-rule

The rule must contain the script that generates the command line and it must be included in the email header.

Learn how to create typology rules in 蜜豆视频 Campaign v7/v8 in this section.

NOTE
We recommend creating a typology rule: the List-Unsubscribe functionality will be automatically added in each email using this typolgy rule.

One-Click List-Unsubscribe one-click-list-unsubscribe

With this method, clicking the鈥 Unsubscribe 鈥痩ink directly unsubscribes the user, requiring only a single action to unsubscribe.

Starting on June 1, 2024, major ISPs will be requiring senders to comply with One-Click List-Unsubscribe.

To comply with this requirement, senders must:

  • Add the following command line: List-Unsubscribe-Post: List-Unsubscribe=One-Click.
  • Include a URI unsubscribe link.
  • Support reception of the HTTP POST response from the receiver, which 蜜豆视频 Campaign supports. You can also use an external service.

To support the One-Click List-Unsubscribe POST response directly in 蜜豆视频 Campaign v7/v8, you must add in the 鈥淯nsubscribe recipients no-click鈥 web application. To do so:

  1. Go to Resources > Online > Web applications.

  2. Upload the 鈥淯nsubscribe recipients no-click鈥 XML file.

To configure One-Click List-Unsubscribe in Campaign, you can either:

  • Add the command line in the delivery or delivery template - Learn how
  • Create a typology rule - Learn how

Configuring One-Click List-Unsubscribe in the delivery or template one-click-delivery-template

To configure One-Click List-Unsubscribe in the delivery or delivery template, follow the steps below.

  1. Go to the SMTP section of the delivery properties.

  2. Under Additional SMTP Headers, enter the command lines such as in the example below. Each header should be on a separate line.

For example:

List-Unsubscribe-Post: List-Unsubscribe=One-Click
List-Unsubscribe: <https://domain.com/webApp/unsubNoClick?id=<%= recipient.cryptedId %> >, < mailto:<%@ include option='NmsEmail_DefaultErrorAddr' %>?subject=unsubscribe<%=escape(message.mimeMessageId) %> >

image

The above example will enable One-Click List-Unsubscribe for ISPs who support One-Click, while ensuring that receivers who do not support 鈥渕ailto鈥 can still request unsubscribe via email.

Creating a typology rule to support One-Click List-Unsubscribe one-click-typology-rule

To configure One-Click List-Unsubscribe using a typology rule, follow the steps below.

  1. From the navigation tree, go to Typolgy rules and click New.

    image

  2. Configure the new typology rule such as:

    • Rule type: Control
    • Phase: At the start of targeting
    • Channel: Email
    • Level: your choice
    • Active

    image

  3. Code the javascript of the typology rule as in the example below.

    note note
    NOTE
    The code described below is to be referenced as an example only.

    This example details how to:

    • Configure a 鈥渕ailto鈥 List-Unsubscribe. It will add the headers or append the existing 鈥渕ailto:鈥 parameters and replace them with: <mailto鈥>, https://鈥.
    • Add in the One-Click List-Unsubscribe header. It uses var headerUnsubUrl = "https://campmomentumv7-mkt-prod3.campaign.adobe.com/webApp/unsubNoClick?id=<%= recipient.cryptedId %>"梅
    note note
    NOTE
    You can add other parameters (such as &service =鈥).
    code language-none
    // Function to add or replace a header in the provided headers
    function鈥痑ddHeader(headers, header, value)鈥 {
    
    鈥// Create the new header line
    鈥痸ar鈥痟eaderLine = header +鈥": "鈥+ value;
    
    鈥// Create a regular expression to find the specified header
    鈥痸ar鈥痳egExp =鈥痭ew鈥疪egExp(header +鈥":(.*)$",鈥"i")
    
    鈥// Split the headers into individual lines
    鈥痸ar鈥痟eaderLines = headers.split("\n");
    
    鈥// Loop through each line
    鈥痜or鈥(var鈥痠=0; i < headerLines.length; i++) {
    
    鈥// Check if the specified header exists
    鈥痸ar鈥痬atch = headerLines[i].match(regExp)
    
    鈥// If it exists
    鈥痠f鈥( match !=鈥痭ull鈥) {
    
    鈥// Replace the existing header line
    鈥痟eaderLines[i] = headerLine;
    
    鈥// Return the modified headers
    鈥痳eturn鈥痟eaderLines.join("\n");
    鈥瘆
    鈥瘆
    
    鈥// If the header does not exist, add the new header line
    鈥痟eaderLines.push(headerLine);
    
    鈥// Return the modified headers
    鈥痳eturn鈥痟eaderLines.join("\n");
    }
    
    // Function to get the value of a specified header from the provided headers
    function鈥痝etHeader(headers, header) {
    
    鈥// Create a regular expression to find the specified header
    鈥痸ar鈥痳egExp =鈥痭ew鈥疪egExp(header +鈥":(.*)$",鈥"i")
    
    鈥// Split the headers into individual lines
    鈥痸ar鈥痟eaderLines = headers.split("\n");
    
    鈥// Loop each line
    鈥痜or鈥痚ach (line鈥痠n鈥痟eaderLines) {
    
    鈥// Check if the specified header exists
    鈥痸ar鈥痬atch = line.match(regExp);
    
    鈥// If it exists
    鈥痠f鈥( match !=鈥痭ull鈥) {
    
    鈥// Return the header value, removing leading whitespace
    鈥痳eturn鈥痬atch[1].replace(/^\s*/,鈥"");
    鈥瘆
    鈥瘆
    
    鈥// If the header does not exist, return an empty string
    鈥痳eturn鈥"";
    }
    
    
    // Define the unsubscribe URL
    var鈥痟eaderUnsubUrl =鈥"https://campmomentumv7-mkt-prod3.campaign.adobe.com/webApp/unsubNoClick?id=<%= recipient.cryptedId %>";
    
    // Get the value of the List-Unsubscribe header
    var鈥痟eaderUnsub = getHeader(delivery.mailParameters.headers,鈥"List-Unsubscribe");
    
    // If the List-Unsubscribe header does not exist
    if鈥( headerUnsub ===鈥""鈥) {
    鈥// Add the List-Unsubscribe header
    鈥痙elivery.mailParameters.headers = addHeader(delivery.mailParameters.headers,鈥"List-Unsubscribe",鈥"<"+headerUnsubUrl+">");
    }
    // If the List-Unsubscribe header exists and contains 'mailto'
    else鈥痠f(headerUnsub.search('mailto')){
    鈥// Replace the existing List-Unsubscribe header
    鈥痙elivery.mailParameters.headers = addHeader(delivery.mailParameters.headers,鈥"List-Unsubscribe",鈥"<"+headerUnsubUrl+">");
    }
    
    // Get the value of the List-Unsubscribe-Post header
    var鈥痟eaderUnsubPost = getHeader(delivery.mailParameters.headers,鈥"List-Unsubscribe-Post");
    
    // If the List-Unsubscribe-Post header does not exist
    if鈥( headerUnsubPost ===鈥""鈥) {
    鈥// Add the List-Unsubscribe-Post header
    鈥痙elivery.mailParameters.headers = addHeader(delivery.mailParameters.headers,鈥"List-Unsubscribe-Post",鈥"List-Unsubscribe=One-Click");
    }
    
    // Return true to indicate success
    return鈥痶rue;
    

    image

  4. Add your new rule to a typology applying to emails.

    note note
    NOTE
    You can add it to the default typology.

    image

  5. Prepare a new delivery.

    note caution
    CAUTION
    Verify that the Additional SMTP headers field in the delivery properties is empty.

    image

  6. Check during delivery preparation that your new typology rule is applied.

    image

  7. Validate that the Unsubscribe link is present.

    image

Email optimization email-optimization

SMTP smtp

SMTP (Simple mail transfer protocol) is an Internet standard for email transmission.

The SMTP errors that aren鈥檛 checked by a rule are listed in the Administration > Campaign Management > Non deliverables Management > Delivery log qualification folder. These error messages are by default interpreted as unreachable soft errors.

The most common errors must be identified and a corresponding rule added in Administration > Campaign Management > Non deliverables Management > Mail rule sets if you wish to correctly qualify the feedback from the SMTP servers. Without this, the platform will perform unnecessary retries (case of unknown users) or wrongly place certain recipients in quarantine after a given number of tests.

Dedicated IPs dedicated-ips

蜜豆视频 provides a dedicated IP strategy for each customer with a ramp-up IP in order to build a reputation and optimize delivery performance.

recommendation-more-help
ce4a522f-06e7-4189-95bc-98ae01b1a1ec