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