Procurando por um aplicativo de interceptação de correio PHP

0

Eu tenho o PHP (XAMPP) configurado localmente em um sistema operacional Windows, e estou escrevendo um webapp com ele. Esta aplicação web envia vários e-mails. Para fins de teste, na verdade não desejo encaminhar emails gerados pelo sistema.

Eu também não quero configurar mercury e pegasus mail, como a única funcionalidade que eu preciso é de um aplicativo que vai me mostrar todos os e-mails enviados e me permite clicar em possíveis links nos e-mails. Nada mais é necessário a partir do aplicativo. Na verdade, não preciso armazenar os e-mails enviados e não quero me limitar a usar apenas os endereços de e-mail @localhost.

Para fazer isso, eu suponho que preciso configurar o PHP.ini: 'sendmail_path' para um aplicativo que irá interceptar os e-mails e exibi-los para mim.

Existe tal aplicativo e onde posso encontrá-lo?

    
por Michael Frey 07.10.2011 / 19:18

2 respostas

2

A interface sendmail tornou-se popular devido à sua simplicidade: a mensagem incluindo cabeçalhos é simplesmente gravada em seu stdin. Isso significa que você pode simplesmente escrever um programa que copie seu stdin para um arquivo.

Assumindo que o PHP de linha de comando está incluído no XAMPP, você pode usar php.exe fake-sendmail.php como o sendmail_path , com fake-sendmail.php contendo o seguinte script.

<?php
$name = time() . ".eml";
$fh = fopen($name, "w");
if (!$fh) die;
while ($buf = fread(STDIN, 8192))
    fwrite($fh, $buf);
fclose($fh);
    
por 07.10.2011 / 19:32
1

Eu tentei a solução postada pelo grawity e funciona. Aqui está uma versão modificada do código para que você possa ter os arquivos eml na mesma pasta que o arquivo php, aconteça o que acontecer:

<?php
$name = dirname(__FILE__).'/'.time() . ".eml";
$fh = fopen($name, "w");
if (!$fh) die;
for($i = 0; $i < $argc; $i++)
    fwrite($fh, 'Arg'.$i.': '.$argv[$i].PHP_EOL);
while (($buf = fread(STDIN, 8192)) != "")
    fwrite($fh, $buf);
fclose($fh);

Edit: Eu também adicionei 2 linhas para imprimir todos os parâmetros enviados para a linha de comando. Finalmente, eu agora lidei com o valor de retorno do fread corretamente graças ao grawity.

    
por 19.01.2012 / 23:05