O serviço Amazon SES cuida da entrega de mensagens, fazendo o papel de MTA.
Pelo que pesquisei, a MailChimp passou a usar este serviço para entrega.
A maior vantagem é a escala.
O serviço possui limites que são aumentados periodicamente.
No Blog Email Marketing Vodoo há o relato do aumento limite para 1 milhão por dia, em um mês de uso.
1 dolar a cada 10 mil mensagens + o gasto de banda ( $0.12 por GB )
Os testes foram feitos usando a SDK da Amazon para PHP e executados a partir de uma máquina em rede simples. Naturalmente em um envio real, a rede será mais rápida, porém com envio maior de informações.
Testes a partir de máquina local, com texto plano:
Com envio a partir de uma máquina dentro do datacenter diminuiremos o tempo de rede porém aumentaremos a quantidade de informação do POST, o que deve permanecer nestes 4800 envios por hora, por processo.
Podemos abrir N processos por máquina, 115.200 envios/dia por processo.
Usando 20 processos simultâneos, 2000 envios em 1.4 minutos.
(Desde que exista a permissão Max Send Rate menor que 1 email/second)
É informado se o email foi entregue com sucesso, mas não indica a qualidade da entrega. Não nos listam quais foram estes emails com sucesso.
As falhas são entregues por email, a partir de endereços específicos, como o bounce: MAILER-DAEMON@email-bounces.amazonses.com
Isto é ruim pois eu esperava poder recolher isso via API. Continua sendo necessário processar os retornos a partir de mensagens de email, e não a partir de uma inteligência da Amazon, semelhante ao serviço já prestado no Amazon SQS.
O relatório nos entrega apenas os números finais, o que é uma pena.
Discussões sobre esta necessidade, no Fórum
É um serviço muito bom, porém 3 vezes mais caro que a entrega a partir de um MTA próprio, sem grandes vantagens imediatas que justifiquem a migração, para aplicativos que já estão estáveis com o envio simples por MTA.
Se ainda não está implantando o know how sobre a entrega por MTA, aí sim é um ótima escolha, por não precisar de manutenção em um servidor de email próprio
Exemplo de envio com PHP:
// Instantiate the class$email = new AmazonSES();
$response = $email->send_email( 'no-reply@amazon.com', // Source (aka From) array('ToAddresses' => 'nobody@amazon.com'), // Destination (aka To) array( // Message (short form) 'Subject.Data' => 'Email Test ' . time(), 'Body.Text.Data' => 'This is a simple test message ' . time() ));
// Success?var_dump($response->isOK());
No Symfony (1 e 2), a saída do controlador apenas é enviada após o processamento interno.
Para uma saída constante, em processos demorados, precisamos outra abordagem,
chamando o flush manualmente e seguindo o caminho Keep-Alive.
A necessidade
A CamelSpiderBundle possui um controller que executa a CamelSpider e isto pode demorar um pouco.
É necessário que exista uma saída informativa e uma negociação com o navegador para que não seja interrompida a exibição.
Solução:
//....
Existem várias formas de customizar as páginas de erro no Symfony 2,
mas uma maneira bem simples,
é sobrecarregar a view de erros da Twig,
criando o arquivo app/Resources/TwigBundle/views/Exception/error.html.twig:
Lógico que esta sobrecarga de exibição é feita apenas no ambiente de produção,
e para testar suas alterações você precisa limpar o cache.
./app/console cache:clear --env=prod
Em sua terceira edição, o PHP'n Rio será realizado no dia 05 de Novembro de 2011 na cidade do Rio de Janeiro, RJ.
O evento é focado na linguagem PHP e seu ecossistema e será composto por duas trilhas de palestras, quatro minicursos e uma área de desconferência, onde os participantes terão a oportunidade de apresentar suas palestras relâmpago, e praticarem programação em sessões de Coding Dojo durante todo o evento. Para mais informações acompanhe o site http://phpnrio.com.brÉ meus queridos,
até nosso fiél escudeiro Capistrano
possui seus bugs ( feature? :D )
after "deploy:update", "deploy:cleanup"
Sim,
você pode editar Issues e Gists no Eclipse!
<?php namespace Acme\DemoBundle\Controller; class DemoController extends Controller
{
public function indexAction()
{
//seu objeto Token, definido no Provider:
$this->get('security.context')->getToken(); //seu objeto Identity, definido no Provider
$this->get('security.context')->getToken()->getUser(); //seu método implementado no objeto Identity
$this->get('security.context')->getToken()->getUser()->getLastName(); //....
E você, tem solução melhor pra isso? Comente!
PS: Nem fale de "set :git_enable_submodules, 1" que não resolve.
Pense comigo em um exemplo simples,
onde você testa x e define valor padrão caso x não atenda ao
requisito mínimo.
require __DIR__.'/c.php'; if (!is_callable($c = @$_GET['c'] ?: function() { echo 'Woah!'; }
)) throw new Exception('Error'); $c();
Onde mais você vê o uso de :? ?
Fácil fácil!
Mais um papo com meu amigo @rgou