Is there a way to remove the return-path that kohana is setting in emails?

965 views Asked by At

Our site uses Kohana and php and we are using sendgrid to send transactional emails. With gmail we're having a ton of spam issues and we only send opt-in emails and have a high open rate. One of the potential issues is that our emails seem to have TWO return-paths in the header:

  1. Is being set by us in Kohana
  2. is being inserted by sendgrid.

Sendgrid says that when they send a message, they take over that 'envelope from' for the sake of handling Bounce management. But we can't figure out a way to have Kohana not insert this. Any suggestions? CODE EXAMPLE: Kohana uses Swift to send mails. How we send them now is below. We've tried removing reply-to via

$message->headers->set('reply-to', '');

but it doesn't appear to work. Funny enough, setting it to a non-empty value alters it, but there doesn't seem to be a way to get rid of it altogether.

Full code for this function:

/**
 * Send an email message.
 *
 * @param   string|array  recipient email (and name), or an array of To, Cc, Bcc names
 * @param   string|array  sender email (and name)
 * @param   string        message subject
 * @param   string        message body
 * @param   boolean       send email as HTML
 * @param   string        Reply To address. Optional, default null, which defaults to From address
 * @return  integer       number of emails sent
 */
public static function send($category, $to, $from, $subject, $message, $html = FALSE, $replyto = null)
{
    // Connect to SwiftMailer
    (email::$mail === NULL) and email::connect();

    // Determine the message type
    $html = ($html === TRUE) ? 'text/html' : 'text/plain';

// Append mixpanel tracking pixel to html emails
if ($html) {
  $mixpanel_token = FD_DEV_MODE ? "08c59f4e26aa718a1038459af75aa559" : "d863dc1a3a6242dceee1435c0a50e5b7";
  $json_array = '{ "event": "e-mail opened", "properties": { "distinct_id": "' . $to . '", "token": "' . $mixpanel_token . '", "time": ' . time() . ', "campaign": "' . $category . '"}}';
  $message .= '<img src="http://api.mixpanel.com/track/?data=' . base64_encode($json_array) . '&ip=1&img=1"></img>';
}

    // Create the message
    $message = new Swift_Message($subject, $message, $html, '8bit', 'utf-8');

// Adding header for SendGrid, added by David Murray
$message->headers->set('X-SMTPAPI', '{"category" : "' . $category . '"}');

    if (is_string($to))
    {
        // Single recipient
        $recipients = new Swift_Address($to);
    }
    elseif (is_array($to))
    {
        if (isset($to[0]) AND isset($to[1]))
        {
            // Create To: address set
            $to = array('to' => $to);
        }

        // Create a list of recipients
        $recipients = new Swift_RecipientList;

        foreach ($to as $method => $set)
        {
            if ( ! in_array($method, array('to', 'cc', 'bcc')))
            {
                // Use To: by default
                $method = 'to';
            }

            // Create method name
            $method = 'add'.ucfirst($method);

            if (is_array($set))
            {
                // Add a recipient with name
                $recipients->$method($set[0], $set[1]);
            }
            else
            {
                // Add a recipient without name
                $recipients->$method($set);
            }
        }
    }

    if (is_string($from))
    {
        // From without a name
        $from = new Swift_Address($from);
    }
    elseif (is_array($from))
    {
        // From with a name
        $from = new Swift_Address($from[0], $from[1]);
    }

    // Reply To support, not standard in Swift, added by Soham
    if (!$replyto) $replyto = $from;

    $message->setReplyTo($replyto);

    return email::$mail->send($message, $recipients, $from);
}
2

There are 2 answers

2
Daan On

This is not really a Kohana question but more of a Swiftmailer question, since Swiftmailer comes not standard with the Kohana Framework. According to the Swiftmailer docs you can set/get the Return-Path explicitly:

$message->setReturnPath('[email protected]');

Hopes this helps!

0
Roland Andreas On

i just wanna say thank you for providing this solution for me, indirectly..

    // Adding header for SendGrid, added by David Murray
$message->headers->set('X-SMTPAPI', '{"category" : "INSERT CATEGORY HERE"}');

X-SMTPAPI usage documentation from Sendgrid's Website is sucks..