nfephp-org / sped-mail
API para geração e envio dos emails relacionados com o SPED.
Installs: 13 958
Dependents: 0
Suggesters: 0
Security: 0
Stars: 10
Watchers: 7
Forks: 30
Open Issues: 0
Requires
- php: >= 7.0
- ext-dom: *
- nfephp-org/sped-common: ^5.0
- phpmailer/phpmailer: ^6.1
- soundasleep/html2text: ~0.3
Requires (Dev)
- phpcompatibility/php-compatibility: ^9.3
- phpstan/phpstan: ^0.12.99
- phpunit/phpunit: ^6
- scrutinizer/ocular: ^1.3
- squizlabs/php_codesniffer: dev-master
README
O envio de emails é parte integrante das necessidades de quem opera com os serviços SPED.
De acordo com a legislação é obrigatório o envio de emails contendo os xml das NFe e dos CTe aos seus repectivos destinatários.
Alguns destinatários, erroneamente, pedem também que seja enviado o PDF relativo ao Documento Auxiliar (DANFE, DACTE ou DACCE) em anexo a esse email.
Outros requerem que os emails seja enviados a várias caixas postais.
Esta parte da API se destina a prover essa facilidade, caso se deseje.
Como instalar :
Adicione este pacote com o composer, por linha de comando:
composer require nfephp-org/sped-mail
Ou adicione ao seu composer.json:
{
"require": {
"nfephp-org/sped-mail": "^1.0"
}
}
Como usar :
Essa classe pode ser usada de duas formas distintas.
1 - Usando o método estatico:
$resp = Mail::sendMail($config, $xml, $pdf, $addresses, $template, $pfx, $password, $mailer);
Onde : $config é um stdClass contendo as configuração de seu SMTP (OBRIGATÓRIO)
$config = new stdClass(); $config->smtpdebug = 0; //0-no 1-client 2-server 3-connection 4-lowlevel $config->host = 'smtp.example.com.br'; $config->port = 587; //25 ou 465 ou 587 $config->smtpauth = true; $config->user = 'fulano@example.com.br'; $config->password = 'senha'; $config->secure = 'tls'; $config->authtype = ''; //'', CRAM-MD5, PLAIN, LOGIN, XOAUTH2 $config->from = 'fulano@example.com.br'; $config->fantasy = 'Fulanoda Silva'; $config->replyTo = 'ciclano@mail.com'; $config->replyName = 'Ciclano Moreira'; $config->smtpoptions = null; /*[ 'ssl' => [ 'verify_peer' => true, 'verify_depth' => 3, 'allow_self_signed' => true, 'peer_name' => 'smtp.example.com', 'cafile' => '/etc/ssl/ca_cert.pem', ] ];*/ $config->timeout = 130;
$xml é o path ou o conteudo do xml que se deseja enviar (OBRIGATÓRIO)
$xml = '../nfe.xml';
ou ainda
$xml = file_get_contents('../nfe.xml');
Idem para o $pdf (OPCIONAL)
$pdf = '../nfe.pdf';
ou ainda
$pdf = file_get_contents('../nfe.pdf');
$address é um array contendo os endereços de email para quem você deseja enviar a mensagem. Essas listas de email serão verificadas e os endereços que não forem validos serão descartados. Se não for passada uma lista de endereços o sistema irá procurar no XML pelos endereços e esses serão usados, se existirem. (OPCIONAL)
$addresses = ['fulano@client.com.br'];
O template usado pode ser substituido pelo de sua escolha, usando o parametro $template (OPCIONAL). Use como referencia os templates padrões para criar o seu veja isso na classe Base.php
$template = '<p>Meu HTML {emitente} .... ';
O pfx é o conteudo do certificado pfx (OPCIONAL), que pode ser lido de um arquivo ou diretamente da sua base de dados.
$pfx = file_get_contents('path ao certificado pfx');
Password é a senha do certificado pfx para que possa ser usado (OPCIONAL), é claro que se o certificado for passado a senha também severá ser passada.
$password = 'senha';
O último parametro é uma instácia já existente do PHPMailer.
$mailer = new PHPMailer();
Para maiores detalhes veja os exemplos indicados na pasta examples.
NOTA: Em caso de falha será retornado um EXCEPTION
Como enviar para vários destinatários
Pordemos enviar os emails para vários destinatários basicamente de duas maneiras diferentes:
1 - Indicando todos os destinatários no próprio XML do documento
Neste caso podemos fazer uso da tag <obsCont> podem existir dezenas desses campos no xml, essa com certeza é a manira mais inteligente de indicar vários destinários, pois podem ser lidos diretamente do xml.
Veja que o tipo do campo xCampo="email" passa a ser obrigatório para que possamos identificar que este campo indica um email.
<obsCont xCampo="email"> <xTexto>fulano@yahoo.com.br</xTexto> </obsCont>
2 - Passando os endereços adicionais em um array nesta classe
Essa forma já foi indicada acima na variável $addresses = [ ... ];