terça-feira, 1 de novembro de 2011

Enviar e-mails com PHP


Nós sabemos por que você está aqui ... você quer escrever um script para enviar e-mails a seus amigos com endereços de retorno engraçado. Estou aqui para dizer que você é melhor do que isso. Há muito mais você poderia estar fazendo com sua vida! Mas, que outras razões você poderia ter?



Bem, talvez você tem um cron job que você quer para informá-lo de questões, tem um script iniciada pelo usuário que você gostaria de ser notificado quando executado, ter um "Fale Conosco" forma que encaminha mensagens para você, deseja flexionar seus músculos PHP e escrever o seu próprio web-based cliente de email, necessidade de configurar um script de confirmação-by-email - há uma abundância de outras razões para enviar e-mail com PHP. Além disso, é tão fácil!


Na maioria dos casos a instalação do PHP será capaz de enviar e-mails. Se você estiver usando um servidor compartilhado, ou se você instalou o PHP usando um sistema de gerenciamento de pacotes como o apt-get, mais do que provavelmente você está tudo definido. Você realmente só precisa se preocupar com a configuração extra se você está compilando o PHP do fonte, ou se você está executando em Windows. Em ambos os casos, há uma abundância de recursos on-line disponíveis para ajudá-lo. Porque isso é tudo além do escopo deste artigo, vou assumir que você está definido. Se não, Google vai ser seu amigo.


Exemplo do Super-Basic
Para enviar e-mail apenas uma muito simples, o código é:


<? Php
mail ( $ endereço , $ assunto , $ mensagem );


Realmente, isso é tudo o que há para envio básicos de texto simples e-mails (se ele não funcionar para você, verifique novamente com o Google para ver como configurar o PHP corretamente).
Agora vamos ver como isso ficaria em um script. Digamos, por exemplo, você quiser que o script de e-mail que você cada vez que uma consulta falha:


<? Php
$ Query = "SELECT left_arm AS arm_in, right_leg AS leg_in, front_head AS head_in DE ONDE hokey_pokey its_about = 'all'" ;
try {
    $ Result = $ db -> query ( $ query );
    / / ...
}
catch (PDOException $ e ) {
    mail ( "bad_things@my_database.com" , "Error in" . $ _SERVER [ "SCRIPT_NAME" ], e $ -> getMessage ());
}


Se há algum erro imprevistos que acontece com a execução da consulta, em seguida, você receberá um e-mail informando o roteiro tinha um erro e que esse erro foi.


A Full-Blown Exemplo mail HTML
Agora, vamos verificar um full-blown multipart mail () exemplo que tem um corpo HTML com uma alternativa de texto simples e um anexo de arquivo:


<? Php
$ EmailList = matriz ( "first_sucker@wazoo.com" ,
                   "NextSucker@hemail.com" ,
                   "Othersucker32@clotmail.com" ,
                   "Sckrfnl@mayohell.com" );

$ Headers = "From: \" Mumsy Fluffy \ "<sincere@dumsing.com> \ r \ n" .
   "Repy-To: weregonnaberich@shhhsecret.com \ r \ n" .
   "MIME-Version: 1.0 \ r \ n" .
   "Content-Type: multipart / mixed; boundary = \" YaGottaKeepEmSeparated \ "\ r \ n" ;
$ Subject = "Por favor, doe todos os seus dinheiros para nós" ;
$ GoodAttachment = chunk_split ( base64_encode ( file_get_contents ( "novyrus.zip" )));
$ Corpo = "- YaGottaKeepEmSeparated \ r \ n" .
    "Content-Type: multipart / alternative; boundary = \" EachEmailAlternative \ "\ r \ n" .
     "- EachEmailAlternative \ r \ n" .
      "Content-Type: text / plain; charset = \" iso-8859-1 \ "\ r \ n" .
      "Content-Transfer-Encoding: 7bit \ r \ n" .
      "Você tem e-mail de texto barato você não tem dinheiro. Por favor, ignore. \ R \ n" .
     "- EachEmailAlternative \ r \ n" .
      "Content-Type: text / html; charset = \" iso-8859-1 \ "\ r \ n" .
       "<html>
 <head>
  <title> Precisamos de dinheiro para dar-lhe </ title>
 </ Head>
 <body>
  <p> 


Encontramos alguns <span style = 'color: green " > dinheiro </ span>. E precisamos dar-nos dinheiro para dar alguns você. Nós é gente boa. Você pode confiar. Por favor, instale apego informações de contato 


</ p>
 </ Body>
</ Html> \ r \ n ".
    "- YaGottaKeepEmSeparated \ r \ n" .
     "Content-Type: application / zip; name = \" novyrus.zip \ "\ r \ n" .
     "Content-Transfer-Encoding: base64 \ r \ n" .
     "Content-Disposition: attachment \ r \ n" .
     $ GoodAttachment . "\ r \ n" .
    "- YaGottaKeepEmSeparated -" ;

foreach ( $ emailList AS $ addy ) {
   $ Sucesso mail = ( $ addy , $ assunto , $ corpo , $ headers );
   se (! sucesso $ ) {
       echo "Mail to" . $ addy . "é falhar." ;
   }
}


Certos aspectos mais típicos scripts e-mail tinha sido simplificada para tornar o conceito geral mais fácil de entender, embora eu vou tocar naqueles nesta avaria.
Primeiro, o emailList $ matriz é preenchida com alguns endereços de e-mail que eu gostaria de compartilhar a minha mensagem com. A matriz é iterado no final do script e cada endereço será enviada uma cópia do meu e-mail.


Em seguida, o $ headers string é construído com cabeçalhos de mensagens. Cada cabeçalho na string é separada com um CRLF ( \ r \ n ) por RCF 2822 , a norma que define o formato das mensagens de e-mail.
"From: \" Mumsy Fluffy \ "<sincere@dumsing.com> \ r \ n"
A partir de cabeçalho especifica o endereço de email do destinatário verá a mensagem como tendo vindo.
"Repy-To: weregonnaberich@shhhsecret.com \ r \ n"


O cabeçalho Reply-To é o endereço de e-mail para o qual uma resposta de e-mail deve ser enviado. , Tornando-o diferente do que o "From:" header, as chances de este e-mail identificado como sendo Spam aumenta (embora se isso fosse a única coisa que causou um cliente de e-mail para levantar uma bandeira vermelha esta mensagem é spam, então seria, provavelmente, passar ).
"MIME-Version: 1.0 \ r \ n"


O cabeçalho MIME-Version diz ao servidor para esperar Multipurpose Internet Mail Extensions no corpo, o que permite que você tenha um e-mail mais avançado do que texto simples.
"Content-Type: multipart / mixed; boundary = \" YaGottaKeepEmSeparated \ "\ r \ n"


A "Content-Type" cabeçalho realmente faz duas coisas: ele indica que haverá várias partes do corpo de vários tipos, e especifica qual string é usada para dividir cada parte. Isto precisa de seqüência de limite não pode aparecer em qualquer parte do e-mail ou o cliente de email não será capaz de analisar a mensagem corretamente. Você poderia usar "12" como o seu limite, por exemplo, embora as chances são de que ele vai aparecer em outras partes da mensagem. Eu escolhi "YaGottaKeepEmSeparated". A maioria das pessoas atribui um hash gerado aleatoriamente para servir de fronteira, como limite $ = md5 (time ()) , já que a chance de colisão é muito baixa.


O conteúdo do novyrus.zip , que aqui passa a ser localizado no mesmo diretório do script, é base64-codificado e dividido em "blocos" para facilitar a digestão, o cliente de email. O resultado é armazenado em $ goodAttachment que irá fazer uma aparição mais tarde.
Finalmente, o corpo da mensagem é composto ...
"- YaGottaKeepEmSeparated \ r \ n"


Este é o primeiro exemplo do uso do limite definido anteriormente e diz para o cliente de email, "hey, aqui está o início da primeira seção do e-mail.", e começa sempre com o duplo-traço na frente de sua seqüência de limite escolhido.
"Content-Type: multipart / alternative; boundary = \" EachEmailAlternative \ "\ r \ n"


Além de "multipart / mixed" dado em cabeçalhos de e-mail, você também pode usar um cabeçalho Content-Type com "multipart / alternativa" dentro do corpo e com um limite diferente específica para este quebra de fornecer formatos alternativos para a mensagem.
"- EachEmailAlternative \ r \ n"


Esta é a primeira instância do limite aninhados e começa a primeira versão alternativa da mensagem.
"Content-Type: text / plain; charset = \" iso-8859-1 \ "\ r \ n"


Este cabeçalho Content-Type diz o cliente de email esta alternativa é texto puro. Se o cliente não é capaz de exibir os formatos mais complexos, tais como HTML, então ele vai usar esta versão da mensagem.
"Content-Transfer-Encoding: 7bit \ r \ n"


O cabeçalho Content-Transfer-Encoding especifica o esquema de codificação usado na mensagem. Por razões históricas, "7bit" é o valor padrão e assim que este poderia ser omitido. Eu incluí-lo para só assim você vai estar ciente disso.


"Você tem e-mail de texto barato você não tem dinheiro. Por favor, ignore. \ R \ n"
Esta é a versão somente de texto da mensagem que as pessoas que utilizam não-HTML-capable leitores vão ver.
"- EachEmailAlternative \ r \ n"


O fim da primeira alternativa tem sido alcançado, e você está pronto para começar a próxima versão alternativa.
"Content-Type: text / html; charset = \" iso-8859-1 \ "\ r \ n"


Este cabeçalho Content-Type informa o cliente esta versão é formatado como HTML, eo conjunto de caracteres que é usado.
"<html> ... </ Html> \ r \ n"


Note que esta versão, além da inclusão de tags HTML, tem um conteúdo que é consideravelmente diferente do que a versão em texto puro. Alguns filtros de spam podem ver isso como mais um motivo para me bloquear mensagem de chegar à caixa de entrada.
"- YaGottaKeepEmSeparated \ r \ n"
Este é o limite multipart / mixed, indicando que você tiver chegado ao fim da seção corpo da mensagem com todas as suas alternativas.


"Content-Type: application / zip; name = \" novyrus.zip \ "\ r \ n"
O cabeçalho Content-Type sinaliza a próxima parte do e-mail é um anexo (o novyrus.zip arquivo), e que é arquivo ZIP.


"Content-Transfer-Encoding: base64 \ r \ n"
codificação de caracteres para 7bit restringe sete bits e pode não ser capaz de representar fielmente todos os caracteres binários necessários para o arquivo ZIP, razão pela qual o arquivo foi codificado em base64 e fragmentada. O cabeçalho Content-Transfer-Encoding aqui permite que o cliente saber como decodificar o arquivo anexo.
"Content-Disposition: attachment \ r \ n"


Os detalhes do cabeçalho Content-Disposition como o conteúdo deve ser apresentado, há dois valores possíveis: apego e embutidos . Embora dificilmente fazem sentido para exibir um arquivo ZIP elemento inline em uma mensagem, que vem a calhar para incorporar imagens.
$ GoodAttachment. "\ R \ n"


O conteúdo do arquivo anexado é simplesmente despejado na mistura.
"- YaGottaKeepEmSeparated -"
Esta é a fronteira final, declarando que nada mais devem seguir pela terminando com um último conjunto de duplo traços.


Sumário
Lá você tem! Você viu como enviar super-básicos e-mail de texto e e-mails full-fledge HTML com anexos. E-mails simples são apenas uma questão de chamar a função mail (). Para mensagens HTML, você precisa quebrar o seu e-mail em segmentos usando os padrões MIME, divididos por uma fronteira de sua escolha. Em seguida, defina qual é o conteúdo, como ele é codificado, possivelmente a disposição, e então o conteúdo em si. Dependendo a quem você está pensando em enviar e-mails, você vai querer estar consciente sobre os fatores que podem causar a sua mensagem para ser mais provável marcada como spam, apenas no caso de você quiser realmente quer enviar algo sério.

Nenhum comentário :

Postar um comentário

Total de visualizações de página