/
MailController.php
executable file
·113 lines (94 loc) · 3.16 KB
/
MailController.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
<?php
namespace GotChosen\SiteBundle\Controller;
use Doctrine\ORM\EntityRepository;
use FOS\UserBundle\Model\UserManager;
use GotChosen\Mail\Filter;
use GotChosen\SiteBundle\Controller\BaseController;
use GotChosen\SiteBundle\Entity\MassMailQueue;
use GotChosen\SiteBundle\Entity\NotificationType;
use GotChosen\SiteBundle\Entity\User;
use GotChosen\SiteBundle\Repository\MassMailQueueRepository;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Symfony\Component\Finder\Finder;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
/**
* Class MailController
* @package GotChosen\SiteBundle\Controller
*
* @Route(options={"i18n" = false})
*/
class MailController extends BaseController
{
/**
* View a fully rendered e-mail from a MassMailQueue in a
* browser.
*
* @param int $id
*
* @Route("/newsletter/view/{id}", name="newsletter_view")
*/
public function viewInBrowserAction($id)
{
$entry = $this->repo('MassMailQueue')->find($id);
$params = $entry->getParameters();
$params['unsubscribe_link'] = '';
return $this->render('GotChosenSiteBundle:Newsletters:' . $entry->getTemplate(), $params);
}
/**
* Controller action for catching bounces from mailgun and doing appropriate
* things in our DB with them.
*
* @param Request $request
*
* @Route("/bouncer/mailgun", name="bouncer_mailgun")
*/
public function bouncerMailgunAction(Request $request)
{
$email = $request->request->get('recipient');
if ( !$email ) {
return new Response("OK");
}
$userManager = $this->get('fos_user.user_manager');
$user = $userManager->findUserByEmail($email);
if ( !$user ) {
return new Response("OK");
}
$user->setEnabled(false);
$user->setStatus(User::STATUS_BAD_EMAIL);
$this->em()->flush();
return new Response("OK");
}
/**
* Controller action for catching bounces from Mandrill and doing appropriate
* things in our DB with them.
*
* @param Request $request
*
* @Route("/bouncer/mandrill", name="bouncer_mandrill")
*/
public function bouncerMandrillAction(Request $request)
{
$mandrillEvents = $request->request->get('mandrill_events');
if ( !$mandrillEvents ) {
return new Response("OK");
}
$userManager = $this->get('fos_user.user_manager');
$jsonData = json_decode($mandrillEvents, true);
foreach ( $jsonData as $event ) {
if ( !isset($event['msg']['email']) ) {
continue;
}
$user = $userManager->findUserByEmail($email);
if ( !$user ) {
continue;
}
$user->setEnabled(false);
$user->setStatus(User::STATUS_BAD_EMAIL);
$this->em()->flush();
}
return new Response("OK");
}
}