Author: Andreia.Bellini Date: 2010-01-24 18:53:47 +0100 (Sun, 24 Jan 2010) New Revision: 27133
Modified: doc/branches/1.4/more-with-symfony/pt/04-Emails.markdown Log: Several corrections in the chapter "04-Emails" (Portuguese grammar, incorrect code translations, markdown adjusts, ...) Modified: doc/branches/1.4/more-with-symfony/pt/04-Emails.markdown =================================================================== --- doc/branches/1.4/more-with-symfony/pt/04-Emails.markdown 2010-01-24 16:22:41 UTC (rev 27132) +++ doc/branches/1.4/more-with-symfony/pt/04-Emails.markdown 2010-01-24 17:53:47 UTC (rev 27133) @@ -3,47 +3,45 @@ *por Fabien potencier* -Enviar ~e-mails~ com o symfony é simples e poderoso, graças ao uso -da biblioteca [Swift Mailer](http://www.swiftmailer.org/). Apesar da ~Swift Mailer~ -tornar fácil o envio de e-mails, o symfony fornece um invólucro fino em cima dele para -fazer o envio de e-mails ainda mais flexível e poderoso. Este capítulo vai ensiná-lo +O envio de ~e-mails~ com o symfony é simples e poderoso, graças ao uso +da biblioteca [Swift Mailer](http://www.swiftmailer.org/). Apesar do ~Swift Mailer~ +tornar fácil o envio de e-mails, o symfony fornece uma camada adicional acima dele para +tornar o envio de e-mails ainda mais flexível e poderoso. Este capítulo vai ensiná-lo como ter todo o seu poder à sua disposição. -> **NOTE** -> symfony 1,3 embuti o Swift Mailer versão 4.1. +>**NOTE** +>O symfony 1,3 vem com o Swift Mailer versão 4.1. Introdução ------------ -A gestão de e-mail no symfony é centrada em torno de um objeto *mailer*. E como muitos -outros objetos do núcleo do symfony, o *mailer* é uma fábrica (*factory*). Ela é configurada no -arquivo `factories.yml`, e sempre está disponível através do contexto -exemplo: +A gestão de e-mails no symfony é centrada no objeto *mailer*. E, como muitos +outros objetos do núcleo do symfony, o *mailer* é uma *factory*. Ele é configurado no +arquivo `factories.yml`, e está sempre disponível através da instância do contexto (*context*): [php] $mailer = sfContext::getInstance()->getMailer(); >**TIP** ->Ao contrário de outras fábricas (*factories*), o *mailer* é carregado e inicializado na demanda. Se ->você não usá-lo, não há qualquer impacto no desempenho. +>Ao contrário de outras *factories*, o *mailer* é carregado e inicializado por demanda. Se +>você não utilizá-lo, não há qualquer impacto no desempenho. -Este tutorial explica integração a do Swift Mailer no symfony. Se você quiser -aprender os pequenos detalhes da biblioteca Swift em si, veja sua +Este tutorial explica a integração do *Swift Mailer* no symfony. Se você quiser +aprender os pequenos detalhes da biblioteca *Swift Mailer*, veja a [documentação](http://www.swiftmailer.org/docs) dedicada. -Enviar e-mails de uma action* +Enviar e-mails a partir de uma action* ----------------------------- -Em uma *action*, recuperar a instância do Mailer é feita com o simples -método de atalho `getMailer()`: +Em uma *action*, recuperar a instância do *mailer* é simples +utilizando o método atalho `getMailer()`: [php] $mailer = $this->getMailer(); ### A forma mais rápida -Enviar um e-mail em seguida, é tão simples como usar o método ~`sfAction::composeAndSend()`~ -: +Enviar um e-mail é tão simples como usar o método ~`sfAction::composeAndSend()`~: [php] $this-getMailer->()->composeAndSend( @@ -53,21 +51,21 @@ 'Body' ); -O método `composeAndSend()` tem quatro argumentos: +O método `composeAndSend()` possui quatro argumentos: * O endereço de e-mail do remetente(`from`); * O endereço de e-mail do destinatário(s) (`to`); * O assunto da mensagem; * O corpo da mensagem. -Sempre que um método tem um endereço de email como um parâmetro, você pode passar uma string -ou uma matriz: +Sempre que um método tem um endereço de email como parâmetro, você pode passar uma string +ou um array: [php] $address = '[email protected]'; $address = array('[email protected]' => 'Fabien potencier'); -Claro, você pode enviar um e-mail para várias pessoas ao mesmo tempo, passando uma matriz +Claro, você pode enviar um e-mail para várias pessoas ao mesmo tempo, passando um array de e-mails como o segundo argumento do método: [php] @@ -83,26 +81,26 @@ ); $this->getMailer->()->composeAndSend('[email protected]', $to, 'Assunto', 'Corpo'); -### O Jeito Flexível +### A forma Flexível -Se precisar de mais flexibilidade, você também pode usar o metodo ~`sfAction::compose()`~ +Se precisar de mais flexibilidade, você também pode usar o método ~`sfAction::compose()`~ para criar uma mensagem, personalizá-la do jeito que você quiser, e eventualmente enviá-la. Isso é útil, por exemplo, quando você precisa adicionar um -~attachment|e-mail attachment~ (anexo) como mostrado abaixo: +anexo (*~attachment|e-mail attachment~*) como mostrado abaixo: [php] // Cria um objeto de mensagem - $message = $this->getMailer() - ->compose('[email protected]','[email protected]','Assunto','Body') - ->attach(Swift_Attachment::fromPath('/caminho/para/um/file.zip/')) + $mensagem = $this->getMailer() + ->compose('[email protected]','[email protected]','Assunto','Corpo') + ->attach(Swift_Attachment::fromPath('/caminho/para/um/arquivo.zip/')) ; // Enviar a mensagem - $this->getMailer>()->send($message); + $this->getMailer()->send($mensagem); -### O Jeito Poderoso +### A Forma Poderosa -Você também pode criar um objeto mensagem diretamente para uma flexibilidade ainda maior: +Você também pode criar um objeto de mensagem diretamente, para uma flexibilidade ainda maior: [php] $mensagem = Swift_Message:: newInstance() @@ -113,38 +111,38 @@ ->attach(Swift_Attachment::fromPath('caminho/para/um/arquivo.zip')) ; - $this->getMailer()->send($message); + $this->getMailer()->send($mensagem); >**TIP** ->A ["Criando mensagens"](http://swiftmailer.org/docs/messages) e ->["Cabeçalho de mensagem"](http://swiftmailer.org/docs/headers) secções da ->documentação oficial do Swift Mailer descreve tudo o que você precisa saber sobre ->criar mensagens. +>As sessões ["Criando mensagens"](http://swiftmailer.org/docs/messages) e +>["Cabeçalhos das mensagens"](http://swiftmailer.org/docs/headers) da +>documentação oficial do *Swift Mailer* descrevem tudo o que você precisa saber sobre +>a criação de mensagens. -### Usando a Visualização do Symony (*Symfony View*) +### Usando a camada de Visão do Symfony (*Symfony View*) -Enviar e-mails de suas *actions* permite aproveitar o poder das +Enviar e-mails de suas ações permite aproveitar o poder das parciais (*partials*) e componentes (*components*) com bastante facilidade. [php] - $mensagem->setBody($this->getPartial('nome_da_pa', $ arguments)); + $mensagem->setBody($this->getPartial('partial_name', $arguments)); Configuração ------------- -Como qualquer outra fábrica (*factory*) do symfony, o *mailer* pode ser configurada no -arquivo de configuração `factories.yml`. A configuração padrão passa a ter o +Como qualquer outra *factory* do symfony, o *mailer* pode ser configurado no +arquivo de configuração `factories.yml`. A configuração padrão é a seguinte: [yml] mailer: - classe: sfMailer + class: sfMailer param: logging: %SF_LOGGING_ENABLED% charset: %SF_CHARSET% delivery_strategy: realtime transport: - classe: Swift_SmtpTransport + class: Swift_SmtpTransport param: host: localhost port: 25 @@ -152,8 +150,8 @@ username: ~ password: ~ -Ao criar um novo aplicativo, o arquivo de configuração `factories.yml` local -substitui a configuração padrão com alguns padrões sensíveis para os +Ao criar uma nova aplicação, o arquivo local de configuração `factories.yml` +substitui a configuração padrão com alguns padrões sensíveis aos ambientes `prod`, `env` e `test`: [yml] @@ -170,24 +168,24 @@ A Estratégia de Entrega --------------------- -Uma das características mais úteis da integração do Swift em symfony é +Uma das características mais úteis da integração do *Swift Mailer* no symfony é a estratégia de entrega. A estratégia de entrega permite-lhe dizer como o symfony -entregará as mensagens de e-mail e é configurado através da configuração ~`delivery_strategy`~ -do `factories.yml`. A estratégia muda a forma como o -método ~`send()`|`sfMailer::send()`~ comporta. Quatro estratégias estão disponíveis por -padrão, que deverá atender todas as necessidades em comum: +entregará as mensagens de e-mail e, é configurado através da configuração ~`delivery_strategy`~ +no `factories.yml`. A estratégia muda a forma do comportamento do +método ~`send()`|`sfMailer::send()`~. Por padrão, quatro estratégias estão disponíveis, +que deverá atender todas as necessidades comuns: * `realtime`: As mensagens são enviadas em tempo real. * `single_address`: As mensagens são enviadas para um único endereço. - * `spool`: As mensagens são armazenadas em uma fila. + * `spool`: As mensagens são armazenadas em uma fila (*queue*). * `none`: As mensagens são simplesmente ignoradas. ### A Estratégia ~`realtime`~ -A estratégia `realtime`, é a estratégia de entrega padrão, e mais fácil de -configurar, como não há nada especial a fazer. +A estratégia `realtime` é a estratégia de entrega padrão, e mais fácil de +configurar, pois não há nada de especial a fazer. -Mensagens são enviadas através do transporte configurado na seção `transport` +As mensagens são enviadas através do transporte configurado na seção `transport` do arquivo de configuração `factories.yml` (veja a próxima seção para mais informações sobre como configurar o transporte de correio (*mail*)). @@ -197,12 +195,12 @@ configurado através da definição `delivery_address`. Esta estratégia é muito útil no ambiente de desenvolvimento para evitar o envio de -mensagens para os usuários reais, mas ainda permitem que o desenvolvedor verificar a renderização da +mensagens para os usuários reais, mas ainda permite ao desenvolvedor verificar a renderização da mensagem em um leitor de e-mail. >**TIP** ->Se você precisar verificar os destinatários `to`, `cc` e `bcc` originais, que são ->disponíveis, como valores dos cabeçalhos que se segue: `X-Swift-To`, `X-Swift-Cc`, e +>Se você precisar verificar os destinatários `to`, `cc` e `bcc` originais, eles estão +>disponíveis como valores dos seguintes cabeçalhos (*headers*): `X-Swift-To`, `X-Swift-Cc` e >`X-Swift-BCC`, respectivamente. As mensagens são enviadas através do mesmo transporte de e-mail utilizado para a @@ -210,13 +208,13 @@ ### A Estratégia ~`spool`~ -Com a estratégia ~`spool`~, as mensagens são armazenadas em uma fila. +Com a estratégia ~`spool`~, as mensagens são armazenadas em uma fila (*queue*). -Esta é a melhor estratégia para o ambiente de produção, fazendo com que as requisções web -não esperem os e-mails para serem executadas. +Esta é a melhor estratégia para o ambiente de produção, pois as requisções web +não precisam esperar os e-mails serem enviados. -A classe `spool` está configurada com a definição ~`spool_class`~. Por padrão, -symfony já vem com três delas: +A classe `spool` é configurada com a configuração ~`spool_class`~. Por padrão, +o symfony já vem com três delas: * ~`Swift_FileSpool`~: As mensagens são armazenadas no sistema de arquivos. @@ -224,8 +222,8 @@ * ~`Swift_PropelSpool`~: As mensagens são armazenadas em um modelo do Propel. -Quando o *spool* é instanciado, a definição ~`spool_arguments`~ é utilizada como -argumentos do construtor. Aqui estão as opções disponíveis para a classe de filas *built-in* +Quando o *spool* é instanciado, a configuração ~`spool_arguments`~ é utilizada com +os argumentos do construtor. Aqui estão as opções disponíveis para a classe de filas integradas: * `Swift_FileSpool`: @@ -235,92 +233,92 @@ * `Swift_DoctrineSpool`: - * O modelo do Doctrine a ser usado para armazenar as mensagens (`MailMessage` por + * O modelo do Doctrine que será usado para armazenar as mensagens (`MailMessage` por padrão) - * O nome da coluna a ser usada para o armazenamento das mensagens (`message` por padrão) + * O nome da coluna que será usada para o armazenamento das mensagens (`message` por padrão) - * O método a ser chamado para recuperar as mensagens a ser enviada (opcional). Ele - recebe as opções da fila como um argumento. + * O método a ser chamado para recuperar as mensagens a serem enviadas (opcional). Ele + recebe as opções da fila como argumento. * `Swift_PropelSpool`: - * O modelo do Propel a ser usado para armazenar as mensagens (`MailMessage` por padrão) + * O modelo do Propel que será usado para armazenar as mensagens (`MailMessage` por padrão) - * O nome da coluna a ser usada para armazenamento das mensagens (`message` por padrão) + * O nome da coluna que será usada para armazenamento das mensagens (`message` por padrão) * O método a ser chamado para recuperar as mensagens a serem enviadas (opcional). Ele - recebe as opções da fila como um argumento. + recebe as opções da fila como argumento. -Aqui está uma configuração clássica para um spoll do Doctrine: +Aqui está uma configuração clássica para um *spool* do Doctrine: [yml] # Configuração do esquema no schema.yml MailMessage: actAs: {Timestampable: ~} columns: - Mensagem: {type: clob, notnull: true} + message: {type: clob, notnull: true} - [yml] - # Configuração em factories.yml - Mailer: + # Configuração no factories.yml + mailer: class: sfMailer param: delivery_strategy: spool spool_class: Swift_DoctrineSpool spool_arguments: [MailMessage, message, getSpooledMessages] -E a mesma configuração de um spool do Propel: +E a mesma configuração para um *spool* do Propel: [yml] # Configuração do esquema no schema.yml mail_message: - message {type: clob, exigidos: true} + message {type: clob, required: true} created_at: ~ - [yml] - # Configuração em factories.yml + # Configuração no factories.yml dev: - Mailer: + mailer: param: delivery_strategy: spool spool_class: Swift_PropelSpool - spool_arguments: [MailMessage, mensagem, getSpooledMessages] + spool_arguments: [MailMessage, message, getSpooledMessages] -Para enviar a mensagem armazenada em uma fila, você pode usar a tarefa (*task*) ~`project:send-emails`~ -Observação (note que essa tarefa é totalmente independente da implementação da fila, -e as opções que toma): +Para enviar a mensagem armazenada em uma fila (*queue*), você pode usar a tarefa ~`project:send-emails`~ +(note que essa tarefa é totalmente independente da implementação da fila (*queue*), +e as suas opções): $ php symfony project:send-emails >**NOTE** ->A tarefa (*task*) `project:send-emails` recebe as opções `application` e `env` +>A tarefa `project:send-emails` recebe as opções `application` e `env` -Ao chamar a tarefa (*task*) `project:send-emails`, e-mails são enviados através do +Ao chamar a tarefa `project:send-emails`,as mensagens de e-mail são enviadas através do mesmo transporte que é utilizado para a estratégia `realtime`. >**TIP** ->Note que a tarefa (*task*) `project:send-emails` pode ser executada em qualquer máquina, não ->necessariamente na mesma máquina que criou a mensagem. Ele funciona porque +>Note que a tarefa `project:send-emails` pode ser executada em qualquer máquina, não +>necessariamente na mesma máquina que criou a mensagem. Ela funciona porque >tudo é armazenado no objeto da mensagem, até mesmo os anexos de arquivo. - >**NOTE** ->A implementação *built-in* das filas são muito simples. Eles enviam e-mails ->sem qualquer controle de erro, como eles teriam sido enviados se você tivesse usado ->a estratégia `realtime`. Obviamente, as classes de fila padrão pode ser estendidas +>A implementação integrada das filas é muito simples. Elas enviam e-mails +>sem qualquer controle de erro, exatamente como elas teriam sido enviadas se você tivesse usado +>a estratégia `realtime`. Obviamente, as classes de fila (*queue*) padrão podem ser estendidas >para implementar sua própria lógica e gerenciamento de erros. -A tarefa (*task*) `project:send-emails` recebe duas opções opcionais: +A tarefa `project:send-emails` recebe duas opções opcionais: * `message-limit`: Limita o número de mensagens enviadas. - * `time-limit`: Limita o tempo gasto para enviar mensagens (em segundos). + * `time-limit`: Limita o tempo gasto para enviar as mensagens (em segundos). Ambas as opções podem ser combinadas: @@ -330,15 +328,15 @@ após 20 segundos. Mesmo quando se utiliza a estratégia `spool`, talvez você precise enviar uma mensagem -imediatamente, sem armazená-lo na fila. Isso é possível usando o +imediatamente, sem armazená-la na fila. Isso é possível usando o método especial `sendNextImmediately()` do *mailer*: [php] $this->getMailer()->sendNextImmediately()->send($mensagem); -No exemplo anterior, a `$mensagem` não será armazenada na fila e vai -ser enviado imediatamente. Como o próprio nome sugere, o método `sendNextImmediately()` -afeta somente a mensagem muito próxima a ser enviada. +No exemplo anterior, a `$mensagem` não será armazenada na fila e +será enviada imediatamente. Como o próprio nome sugere, o método `sendNextImmediately()` +afeta somente a próxima mensagem a ser enviada. >**NOTE** >O método `sendNextImmediately()` não tem efeito especial, quando a @@ -346,20 +344,19 @@ ### A Estratégia ~`none`~ -Esta estratégia é útil no ambiente de desenvolvimento para evitar e-mails sejam -enviados para os usuários reais. Mensagens ainda estão disponíveis na ferramentas web de depuração -(mais informações na seção abaixo sobre o painel da ferramenta de depuração do -*mailer*). +Esta estratégia é útil no ambiente de desenvolvimento para evitar que os e-mails sejam +enviados para os usuários reais. As mensagens ainda estão disponíveis na barra de ferramentas para debug web (*web debug toolbar*) +(mais informações na seção abaixo sobre o painel *mailer* da barra de ferramentas para debug web). É também a melhor estratégia para o ambiente de teste, onde o -objeto `sfTesterMailer permite a introspecção das mensagens sem a necessidade -realmente a enviá-las (mais informações na seção abaixo sobre tested). +objeto `sfTesterMailer` permite a introspecção das mensagens sem a necessidade +de realmente enviá-las (mais informações na seção abaixo sobre teste). -O transporte de email +O transporte de e-mail ------------------ -Mensagens de correio são realmente enviadas por um transporte. O transporte está configurado no -o arquivo de configuração `factories.yml`, e a configuração padrão utiliza +As mensagens de e-mail são realmente enviadas por um transporte. O transporte está configurado no +arquivo de configuração `factories.yml`, e a configuração padrão utiliza o servidor SMTP da máquina local: [yml] @@ -372,33 +369,33 @@ username: ~ password: ~ -Swift Mailer vem com três classes de transporte diferentes: +O *Swift Mailer* vem com três classes de transporte diferentes: * ~`Swift_SmtpTransport`~: Usa um servidor SMTP para enviar mensagens. - * ~`Swift_SendmailTransport`~: Usa `sendmail` para enviar mensagens. + * ~`Swift_SendmailTransport`~: Usa o `sendmail` para enviar mensagens. - * ~`Swift_MailTransport`~: Usa a função `mail()` nativa do PHP para enviar + * ~`Swift_MailTransport`~: Usa a função nativa do PHP `mail()` para enviar as mensagens >**TIP** >A seção ["Tipos de Transportes"](http://swiftmailer.org/docs/transport-types) >da ->documentação oficial do Swift Mailer descreve tudo o que você precisa saber ->sobre as classes built-in de transporte e seus diferentes parâmetros. +>documentação oficial do *Swift Mailer* descreve tudo o que você precisa saber +>sobre as classes integradas de transporte e seus diferentes parâmetros. -Enviando um E-mail Através de uma Tarefa (*task*) +Enviando um E-mail Através de uma Tarefa ---------------------------- -Enviando um e-mail através de uma tarefa é bastante semelhante ao envio de um e-mail em uma -*action*, como o sistema de tarefas também oferece um método `getMailer()` método. +O envio de e-mail através de uma tarefa é bastante semelhante ao envio de um e-mail em uma +ação, pois o sistema de tarefas também oferece o método `getMailer()`. -Ao criar o *mailer*, o sistema de tarefa (*task*) depende da configuração atual. +Ao criar o *mailer*, o sistema de tarefas depende da configuração atual. Assim, se você quiser usar uma configuração de uma aplicação específica, você deve -passar a opção `--application` (veja no capítulo sobre tarefas, mais +passar a opção `--application` (veja no capítulo sobre tarefas para mais informações sobre esse assunto). Observe que a tarefa usa a mesma configuração dos controladores (*controllers*). Assim, se -deseja forçar a entrega, quando a estratégia `spool` é usada, use +deseja forçar a entrega quando a estratégia `spool` é usada, utilize o `sendNextImmediately()`: [php] @@ -408,30 +405,29 @@ --------- Tradicionalmente, a depuração de e-mails tem sido um pesadelo. Com o symfony, é muito -fácil, graças à ~web debug toolbar~ (Barra de ferramenta Web de depuração). +fácil, graças à ~web debug toolbar~ (barra de ferramentas para debug web). A partir do conforto do seu navegador, você pode facilmente e rapidamente ver quantas -mensagens foram enviadas pela *action* atual: +mensagens foram enviadas pela ação atual: - + Se você clicar no ícone e-mail, as mensagens enviadas são exibidas no painel em sua forma bruta, conforme mostrado abaixo. - + >**NOTE** ->Cada vez que uma mensagem é enviada, symfony também adiciona uma mensagem no log. +>Cada vez que uma mensagem é enviada, o symfony também adiciona uma mensagem no log. Testando ------- -Naturalmente, a integração não seria completa sem uma maneira de testar -as mensagens de correio eletrônico. Por padrão, o symfony registra um `mailer` de teste -(~`sfMailerTester`~) para facilitar o correio de teste em testes funcionais. +Naturalmente, a integração não seria completa sem uma forma de testar +as mensagens de e-mail. Por padrão, o symfony registra um `mailer` de teste +(~`sfMailerTester`~) para facilitar o teste de e-mails com testes funcionais. -O método ~`(hasSent)`~ testa o número de mensagens enviadas durante o requisição -corrente: +O método ~`hasSent()`~ testa o número de mensagens enviadas durante o pedido (*request*) atual: [php] $browser-> @@ -456,17 +452,17 @@ ; O segundo argumento do `checkHeader()` e o primeiro argumento do `checkBody()` -pode ser um dos seguintes procedimentos: +pode ser um dos seguintes: * Uma *string* para buscar uma correspondência exata; - * Uma expressão regular para verificar o valor contra ele; + * Uma expressão regular para verificar o valor; - * Uma expressão negativa regular (uma expressão regular a partir de um `!`)) Para - verificar que o valor não corresponde. + * Uma expressão regular negativa (uma expressão regular iniciando com um `!`)) para + verificar se o valor não corresponde. Por padrão, as verificações são feitas com a primeira mensagem enviada. Se várias mensagens -tenham sido enviadas, você pode escolher o que você quiser testar com o +foram enviadas, você pode escolher qual deseja testar com o método ~`withMessage()`~: [php] @@ -475,42 +471,42 @@ with('mailer')->begin()-> hasSent(2)-> withMessage('[email protected]')-> - checkHeader('Assunto', '/Assunto /')-> + checkHeader('Assunto', '/Assunto/')-> checkBody('/Corpo/')-> end() ; -O `withMessage()` tem um destinatário como seu primeiro argumento. Tem igualmente um -segundo argumento para indicar qual a mensagem que você deseja testar se os vários -tenham sido enviados para o mesmo destinatário. +O `withMessage()` tem um destinatário como seu primeiro argumento. Ele também possui um +segundo argumento para indicar qual a mensagem que você deseja testar se várias +foram enviadas para o mesmo destinatário. -Por último mas não menos importante, o método ~`debug()`~ descarrega as mensagens enviadas para local de -problemas quando um teste falhar: +Por último, mas não menos importante, o método ~`debug()`~ descarrega as mensagens enviadas para verificar +os problemas quando um teste falhar: [php] $browser-> get('/foo')-> - com('mailer')-> + with('mailer')-> debug() ; -Mensagens de e-mail como Classes +Mensagens de E-mail como Classes ------------------------- Na introdução deste capítulo, você aprendeu como enviar e-mails a partir de uma -*action*. Esta é provavelmente a maneira mais fácil de enviar e-mails em uma aplicação symfony -e, provavelmente, o melhor quando você só precisa enviar umas simples e poucas -mensagens +ação. Esta é provavelmente a maneira mais fácil de enviar e-mails em uma aplicação symfony +e, provavelmente, a melhor quando você só precisa enviar poucas +mensagens simples. -Mas quando seu aplicativo precisa gerir um grande número de diferentes mensagens de e-mail -, você provavelmente deve ter uma estratégia diferente. +Mas quando sua aplicação precisa gerenciar um grande número de diferentes mensagens de e-mail, +você provavelmente utilizará uma estratégia diferente. >**NOTE** ->Como um bônus adicionado, utilizar classes para mensagens de email significa que a mesma mensagem de e-mail +>Como um bônus, utilizar classes para mensagens de email significa que a mesma mensagem de e-mail >pode ser utilizada em diferentes aplicações; uma *frontend* e uma *backend* >por -> exemplo. +>exemplo. -As mensagens são objetos simples do PHP, a maneira mais óbvia para organizar suas mensagens +As mensagens são objetos simples do PHP, a forma mais óbvia para organizar suas mensagens é criar uma classe para cada uma delas: [php] @@ -518,17 +514,17 @@ class ProjectConfirmationMessage extends Swift_Message { public function __construct() - ( + { parent::__construct('Assunto', 'Corpo'); $this - ->setFrom(array('[email protected]' => 'Minha aplicação Robô')) + ->setFrom(array('[email protected]' => 'Minha Aplicação Robô')) ->attach('...') ; } } -Enviar uma mensagem através de uma *action*, ou de qualquer outro lugar para essa matéria, é +Enviar uma mensagem através de uma ação, ou de qualquer outro lugar, é uma simples questão de instanciar a classe certa da mensagem: [php] @@ -558,24 +554,24 @@ $corpo.= <<<EOF -- - E-mail enviado pela minha aplicação Robô + E-mail enviado pela Minha Aplicação Robô EOF ; parent::__construct($assunto, $corpo); // Definir todos os cabeçalhos compartilhados - $this->setFrom(array('[email protected]' => 'Minha aplicação Robô')); + $this->setFrom(array('[email protected]' => 'Minha Aplicação Robô')); } } -Se uma mensagem depende de alguns objetos de modelo, você pode, naturalmente, passá-las como +Se uma mensagem depende de alguns objetos do modelo, você pode, naturalmente, passá-las como argumentos para o construtor: [php] // lib/email/ProjectConfirmationMessage.class.php class ProjectConfirmationMessage extends ProjectBaseMessage { - public function __construct ($usuario) + public function __construct($usuario) { parent::__construct('Confirmação para'. $usuario->getNome(), 'Corpo'); } @@ -586,8 +582,8 @@ ### Enviar e-mails através do ~Gmail~ -Se você não tiver um servidor SMTP, mas tem uma conta do Gmail, use a seguinte -configuração para usar os servidores do Google para enviar e arquivar mensagens: +Se você não tem um servidor SMTP, mas possui uma conta do Gmail, use a seguinte +configuração para utilizar os servidores do Google para enviar e arquivar mensagens: [yml] transport: @@ -597,17 +593,17 @@ port: 465 encryption: SSL username: seu_usuario_do_gmail_vem_aqui - password: seu_senha_do_gmail_vem_aqui + password: sua_senha_do_gmail_vem_aqui -Substituir o `username` e `passwrod` com as suas credenciais do Gmail e você está +Substitua o `username` e `password` com as suas credenciais do Gmail e você está pronto. ### Personalizando o Objeto *Mailer* Se configurar o *mailer* através do `factories.yml` não for o suficiente, você pode -ouvir o evento ~`mailer.configure`~ evento, e personalizar ainda mais o *mailer*. +escutar (*listen*) o evento ~`mailer.configure`~, e personalizar ainda mais o *mailer*. -Você pode se conectar a esse evento em sua classe `ProjectConfiguration` como mostrado +Você pode se conectar à esse evento em sua classe `ProjectConfiguration` como mostrado abaixo: [php] @@ -615,7 +611,7 @@ { public function setup() { - / / ... + // ... $this->dispatcher->connect( 'mailer.configure', @@ -633,9 +629,9 @@ A seção a seguir ilustra um uso desta poderosa técnica. -### Usando plugins do ~Swift Mailer~ +### Usando ~Plugins do Swift Mailer~ -Para usar os plugins do Swift Mailer, ouvir o evento `mailer.configure` (ver a +Para usar os plugins do *Swift Mailer*, escute (*listen*) o evento `mailer.configure` (ver a seção acima): [php] @@ -653,14 +649,14 @@ >**TIP** >A seção ["Plugins"](http://swiftmailer.org/docs/plugins) da >documentação oficial do Swift Mailer descreve tudo o que você precisa saber >sobre os ->plugins embutidos. +>plugins integrados. -### Personalizar o Comportamento de Carretel (*Spool Behavior*) +### Personalizar o Comportamento do *Spool* -A implementação *built-in* dos *spools* é muito simples. Cada *spool* recupera -todos os e-mails da fila em uma ordem aleatória e os enviam. +A implementação integrada dos *spools* é muito simples. Cada *spool* recupera +todos os e-mails da fila em uma ordem aleatória e os envia. -Você pode configurar um spool para limitar o tempo gasto para enviar e-mails (em segundos), +Você pode configurar um spool para limitar o tempo gasto no envio de e-mails (em segundos), ou para limitar o número de mensagens a enviar: [php] @@ -670,26 +666,26 @@ $spool->setTimeLimit(10); Nesta seção, você vai aprender como implementar um sistema de prioridade para a -fila. Ele lhe dará todas as informações necessárias para implementar sua própria +fila (*queue*). Ele lhe dará todas as informações necessárias para implementar sua própria lógica. -Primeiro, adicione uma coluna `prioridade` para o esquema: +Primeiro, adicione uma coluna `priority` no esquema: [yml] - # para Propel + # para o Propel mail_message: - mensagem: { type: clob, required: true } + message: { type: clob, required: true } created_at: ~ - prioridade: { type: integer, default: 3 } + priority: { type: integer, default: 3 } - # para Doctrine + # para o Doctrine MailMessage: actAs: { Timestampable: ~ } columns: - mensagem: { type: clob, notnull: true } - prioridade: { type: integer } + message: { type: clob, notnull: true } + priority: { type: integer } -Ao enviar um e-mail, defina o cabeçalho de prioridade (1 significa mais alto): +Ao enviar um e-mail, defina o cabeçalho da prioridade (1 significa mais alto): [php] $mensagem = $this->getMailer() @@ -698,45 +694,45 @@ ; $this->getMailer()->send($mensagem); -Em seguida, substitua o método padrão `setMessage()` para alterar a prioridade do -objeto `MailMessage` em si: +Em seguida, sobrescreva o método padrão `setMessage()` para alterar a prioridade do +objeto `MailMessage`: [php] - // para Propel + // para o Propel class MailMessage extends BaseMailMessage { - public function setMensagem($mensagem) + public function setMessage($mensagem) { $msg = unserialize($mensagem); - $this->setPrioridade($msg->getPrioridade()); + $this->setPriority($msg->getPriority()); - parent::setMensagem($mensagem); + parent::setMessage($mensagem); } } - // para a Doctrine + // para o Doctrine class MailMessage extends BaseMailMessage { - public function setMensagem($mensagem) + public function setMessage($mensagem) { $msg = unserialize($mensagem); - $this->prioridade = $msg->getPrioridade(); + $this->priority = $msg->getPriority(); - $this->_set('mensagem', $mensagem); + $this->_set('message', $mensagem); } } -Observe que a mensagem é serializada pela fila, por isso tem que ser desserializados -antes de obter o valor de prioridade. Agora, criar um método que ordena a +Observe que a mensagem é serializada pela fila (*queue*), por isso tem que ser desserializada +antes de obter o valor da prioridade. Agora, crie um método que ordena as mensagens por prioridade: [php] - // para Propel + // para o Propel class MailMessagePeer extends BaseMailMessagePeer { static public function getSpooledMessages(Criteria $criteria) { - $criteria->addAscendingOrderByColumn(self::PRIORIDADE); + $criteria->addAscendingOrderByColumn(self::PRIORITY); return self::doSelect($criteria); } @@ -744,7 +740,7 @@ // ... } - // para a Doctrine + // para o Doctrine class MailMessageTable extends Doctrine_Table { public function getSpooledMessages() @@ -757,18 +753,18 @@ // ... } -O último passo é definir o método de recuperação no `factories.yml` -a configuração para alterar a forma padrão no qual as mensagens são obtidas -da fila: +O último passo é definir o método de recuperação no arquivo de configuração `factories.yml` +para alterar a forma padrão na qual as mensagens são obtidas +da fila (*queue*): [yml] spool_arguments: [MailMessage, message, getSpooledMessages] -E isto resume todo o processo. Agora, cada vez que você executar a tarefa (*task*) `project:send-mails` -, cada e-mail será enviado de acordo com a sua prioridade. +E isto resume todo o processo. Agora, cada vez que você executar a tarefa `project:send-mails`, +cada e-mail será enviado de acordo com a sua prioridade. >**SIDEBAR** ->Personalizando o *Spool* com qualquer Criteria +>Personalizando o *Spool* com qualquer Critério > >O exemplo anterior utiliza um cabeçalho de mensagem padrão, a prioridade. Mas >se você >deseja usar qualquer critério, ou se você não quiser alterar a mensagem >enviada, @@ -784,13 +780,13 @@ > ->compose('[email protected]', '[email protected]', 'Assunto', 'Corpo') > ; > -> $message->getHeaders()->addTextHeader('X-Queue-Criteria', 'foo'); +> $mensagem->getHeaders()->addTextHeader('X-Queue-Criteria', 'foo'); > > $this->getMailer()->send($mensagem); > } > >Em seguida, recuperar o valor deste cabeçalho ao armazenar a mensagem na ->fila, e removê-lo imediatamente: +>fila, e, remova-o imediatamente: > > [php] > public function setMensagem($mensagem) -- You received this message because you are subscribed to the Google Groups "symfony SVN" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/symfony-svn?hl=en.
