1<?php 2 3/* 4 * This file is part of SwiftMailer. 5 * (c) 2009 Fabien Potencier 6 * 7 * For the full copyright and license information, please view the LICENSE 8 * file that was distributed with this source code. 9 */ 10 11/** 12 * Replaces the sender of a message. 13 * 14 * @author Arjen Brouwer 15 */ 16class Swift_Plugins_ImpersonatePlugin implements Swift_Events_SendListener 17{ 18 /** 19 * The sender to impersonate. 20 * 21 * @var string 22 */ 23 private $sender; 24 25 /** 26 * Create a new ImpersonatePlugin to impersonate $sender. 27 * 28 * @param string $sender address 29 */ 30 public function __construct($sender) 31 { 32 $this->sender = $sender; 33 } 34 35 /** 36 * Invoked immediately before the Message is sent. 37 * 38 * @param Swift_Events_SendEvent $evt 39 */ 40 public function beforeSendPerformed(Swift_Events_SendEvent $evt) 41 { 42 $message = $evt->getMessage(); 43 $headers = $message->getHeaders(); 44 45 // save current recipients 46 $headers->addPathHeader('X-Swift-Return-Path', $message->getReturnPath()); 47 48 // replace them with the one to send to 49 $message->setReturnPath($this->sender); 50 } 51 52 /** 53 * Invoked immediately after the Message is sent. 54 * 55 * @param Swift_Events_SendEvent $evt 56 */ 57 public function sendPerformed(Swift_Events_SendEvent $evt) 58 { 59 $message = $evt->getMessage(); 60 61 // restore original headers 62 $headers = $message->getHeaders(); 63 64 if ($headers->has('X-Swift-Return-Path')) { 65 $message->setReturnPath($headers->get('X-Swift-Return-Path')->getAddress()); 66 $headers->removeAll('X-Swift-Return-Path'); 67 } 68 } 69} 70