Title: List-Unsubscribe One-Click code
Last modified: March 21, 2020

---

# List-Unsubscribe One-Click code

 *  [sarmatopia](https://wordpress.org/support/users/sarmatopia/)
 * (@sarmatopia)
 * [6 years, 2 months ago](https://wordpress.org/support/topic/list-unsubscribe-code/)
 * I finally got List-Unsubscribe working, but it still didn’t have the nice (expected)
   button at the top of Gmail. Turns out Gmail doesn’t show it for all senders:
 * > This only works for some senders right now. We’re actively encouraging senders
   > to support auto-unsubscribe — we think 100% should. We won’t provide the unsubscribe
   > option on messages from spammers: we can’t trust that they’ll actually unsubscribe
   > you, and they might even send you more spam. So you’ll only see the unsubscribe
   > option for senders that we’re pretty sure are not spammers and will actually
   > honor your unsubscribe request.
 * [https://gmail.googleblog.com/2009/07/unsubscribing-made-easy.html](https://gmail.googleblog.com/2009/07/unsubscribing-made-easy.html)
 * By the time I learned that, I’d already implemented List-Unsubscribe One-Click.
 * I’d appreciate if you added the code to the plugin:
 *     ```
       $message->headers = array();
   
       $unsubscribe_address = isset( $this->options['reply_to'] ) ?  $this->options['reply_to'] : $this->options['sender_email'];
       $message->headers['List-Unsubscribe-Post'] = 'List-Unsubscribe=One-Click';
       $message->headers['List-Unsubscribe'] = '<mailto:' . $unsubscribe_address . '?subject=unsubscribe>, <' . $this->build_action_url('uc', $user, $email) . '>';
       ```
   
 * and edit the bot check to add:
 *     ```
       if( isset($_POST['List-Unsubscribe']) && 'One-Click' === $_POST['List-Unsubscribe']
           || 'List-Unsubscribe=One-Click' === file_get_contents('php://input') ) {
           return true;
       }
       ```
   
 * [https://tools.ietf.org/html/rfc8058](https://tools.ietf.org/html/rfc8058)
 * And I’m using your AWS SES add-on which currently DOES NOT add ANY headers.
 * `SesClient::sendEmail()` needs to be changed to `SesClient::sendRawEmail()`
 * In `NewsletterAmazonMailer::send()`:
 *     ```
       /** @var array $ses_email */
       $ses_email = $this->prepareEmail($message);
   
       /** @var \Aws\Result $result */
       $result = $ses_client->sendRawEmail($ses_email);
   
       if( $result->get('statusCode') != 200 ) {
           $logger->error( $result );
           return false;
       }
       ```
   
 * and `NewsletterAmazonMailer::send_chunk()`:
 * `$commands[] = $ses_client->getCommand('SendRawEmail', $ses_email);`
 * If you want to handle errors here, the code to do so is at [https://deliciousbrains.com/email-queue-ses/](https://deliciousbrains.com/email-queue-ses/)
 * then `NewsletterAmazonMailer::prepareEmail()` replaced with:
 *     ```
       /**
        * @see https://docs.aws.amazon.com/ses/latest/DeveloperGuide/examples-send-raw-using-sdk.html
        *
        * @param TNP_Mailer_Message $message Plain object containing message values.
        * @return array The message as an array suitable for Aws\Ses\SesClient::sendRawEmail().
        * @throws phpmailerException
        */
       function prepareEmail($message) {
   
           $newsletter = Newsletter::instance();
   
           $mail = new PHPMailer();
   
           $mail->CharSet = 'UTF-8';
   
           $sender = $message->from;
           $sendername = $message->from_name;
   
           $recipient =  $message->to;
   
           $subject = $message->subject;
   
           $htmlbody = $message->body;
           $textbody = $message->body_text;
   
           $mail->setFrom($sender, $sendername);
   
           $reply_to = $newsletter->options['reply_to'];
           if (!empty($reply_to)) {
               $mail->addReplyTo( $reply_to );
           }
   
           foreach( $message->headers as $header_name => $header_value ) {
   
               $mail->addCustomHeader(  $header_name, $header_value );
           }
   
           $mail->addAddress($recipient);
           $mail->Subject = $subject;
           $mail->Body = $htmlbody;
           if(!empty($textbody)) {
               $mail->AltBody = $textbody;
           }
   
           $mail->IsHTML(true);
   
           $mail->preSend();
   
           $message = $mail->getSentMIMEMessage();
   
           $ses_email = array(
               'RawMessage' => array(
                   'Data' => $message
               )
           );
   
           return $ses_email;
       }
       ```
   
    -  This topic was modified 6 years, 2 months ago by [sarmatopia](https://wordpress.org/support/users/sarmatopia/).

Viewing 1 replies (of 1 total)

 *  Thread Starter [sarmatopia](https://wordpress.org/support/users/sarmatopia/)
 * (@sarmatopia)
 * [6 years, 2 months ago](https://wordpress.org/support/topic/list-unsubscribe-code/#post-12568896)
 * AWS SES code also needs:
 * `require_once ABSPATH . WPINC . '/class-phpmailer.php';`

Viewing 1 replies (of 1 total)

The topic ‘List-Unsubscribe One-Click code’ is closed to new replies.

 * ![](https://ps.w.org/newsletter/assets/icon-256x256.png?rev=1052028)
 * [Newsletter - Send awesome emails from WordPress](https://wordpress.org/plugins/newsletter/)
 * [Frequently Asked Questions](https://wordpress.org/plugins/newsletter/#faq)
 * [Support Threads](https://wordpress.org/support/plugin/newsletter/)
 * [Active Topics](https://wordpress.org/support/plugin/newsletter/active/)
 * [Unresolved Topics](https://wordpress.org/support/plugin/newsletter/unresolved/)
 * [Reviews](https://wordpress.org/support/plugin/newsletter/reviews/)

 * 1 reply
 * 1 participant
 * Last reply from: [sarmatopia](https://wordpress.org/support/users/sarmatopia/)
 * Last activity: [6 years, 2 months ago](https://wordpress.org/support/topic/list-unsubscribe-code/#post-12568896)
 * Status: not a support question