English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
SMTP (Simple Mail Transfer Protocol) é o Protocolo de Transmissão de E-mail Simples, é um conjunto de regras usado para transmitir e-mails de um endereço de origem para um endereço de destino, controlando a maneira de transferência das mensagens.
O Ruby oferece Net::SMTP para enviar e-mails e fornece dois métodos novo e start:
novo A função tem dois parâmetros:
nome do servidor O padrão é localhost
número da porta O padrão é 25
iniciar Os parâmetros da função são os seguintes:
servidor - IP do servidor SMTP, o padrão é localhost
port - Porta, o padrão é 25
domain - Domínio do remetente de e-mail, o padrão é ENV["HOSTNAME"]
account - Nome de usuário, o padrão é nil
password - Senha do usuário, o padrão é nil
authtype - Tipo de verificação, o padrão é cram_md5
O método de exemplo de objeto SMTP chamou sendmail, os parâmetros são os seguintes:
source - Uma string ou uma matriz ou qualquer coisa que um iterador retorne a qualquer momento.
sender -Uma string, que aparece no campo do formulário do e-mail.
recipients - Uma string ou uma matriz de strings, representando o endereço do destinatário.
A seguir, está fornecido um simples script Ruby para enviar e-mails:
require 'net/smtp' message = <<MESSAGE_END From: Private Person <[email protected]> Para: Um Usuário de Teste <[email protected]> Assunto: SMTP e-teste de e-mail This is a test e-mensagem de e-mail. MESSAGE_END Net::SMTP.start('localhost') do |smtp| smtp.send_message message, '[email protected]', '[email protected]' fim
Nos exemplos acima, você configurou uma mensagem de e-mail básica, observe o formato correto do título. Um e-mail deve conter From, To e Subject, e há uma linha em branco entre o conteúdo do e-mail e as informações de cabeçalho.
Conecte-se ao servidor SMTP local usando Net::SMTP, use o método send_message para enviar e-mails, os parâmetros do método são o e-mail do remetente e o e-mail do destinatário.
Se você não estiver executando um servidor SMTP no seu computador, você pode usar Net::SMTP para se comunicar com um servidor SMTP remoto. Se você estiver usando um serviço de e-mail pela Internet (como Hotmail ou Yahoo Mail), seu provedor de e-mail fornecerá os detalhes do servidor de envio de e-mails:
Net::SMTP.start('mail.your-domain.com')
O código acima conecta ao host mail.your-domain.com, a porta é 25do servidor de e-mail, se necessário, preencher o nome de usuário e senha, o código é o seguinte:
Net::SMTP.start('mail.your-domain.com', 25, ', ', 'password', :plain)
Os exemplos acima utilizaram o nome de usuário e senha específicos para se conectar ao host mail.your-domain.com, a porta é 25do servidor de e-mail.
Net::SMTP também oferece suporte para o envio de e-mails em formato HTML.
Ao enviar e-mails, você pode configurar a versão MIME, o tipo de documento e o conjunto de caracteres para enviar e-mails em formato HTML.
A seguir, há um exemplo de envio de e-mails em formato HTML:
require 'net/smtp' message = <<MESSAGE_END From: Private Person <[email protected]> Para: Um Usuário de Teste <[email protected]> MIME-Versão: 1.0 Content-type: text/html Assunto: SMTP e-teste de e-mail Este é um e-mensagem de e-mail a ser enviada no formato HTML <b>This is an HTML message.</b> <h1>This is headline.</h1> MESSAGE_END Net::SMTP.start('localhost') do |smtp| smtp.send_message message, '[email protected]', '[email protected]' fim
Se precisar enviar e-mails com conteúdo misto, é necessário configurar o Content-O tipo é multipart/mixed. Dessa forma, é possível adicionar conteúdo de anexo ao e-mail.
O anexo precisa ser codificado antes de ser transmitido pack("m") A função converte seu conteúdo para base64 formato.
Os seguintes exemplos enviarão anexos como /tmp/E-mail do test.txt:
require 'net/smtp' filename = "/tmp/test.txt" # Leitura do arquivo e codificação em base64Formato filecontent = File.read(filename) encodedcontent = [filecontent].pack("m") # base64 marker = "AUNIQUEMARKER" body =<<EOF Este é um e-mail de teste para enviar um anexo. EOF # Definição das informações principais do cabeçalho part1 =<<EOF De: Pessoa Privada <[email protected]> Para: Um Usuário de Teste <[email protected]> Assunto: Enviando Anexo MIME-Versão: 1.0 Content-Tipo: multipart/mixed; boundary="#{marker}" --#{marker} EOF # Definição da ação da mensagem part2 =<<EOF Content-Tipo: text/plain Content-Transfer-Codificação:8bit #{body} --#{marker} EOF # Definição da parte do anexo part3 =<<EOF Content-Tipo: multipart/mixed; name="#{filename}" Content-Transfer-Encoding:base64 Content-Disposition: attachment; filename="#{filename}" #{encodedcontent} --#{marker}-- EOF mailtext = part1 + part2 + part3 # Enviar e-mail begin Net::SMTP.start('localhost') do |smtp| smtp.sendmail(mailtext, '[email protected]', ['[email protected]']) fim rescue Exception => e print "Ocorreu exceção: " + e fim
Atenção:Você pode especificar várias endereços de envio, mas precisa usar vírgula para separá-los.