Pergunta

Eu estou tentando enviar e-mail com um script Ruby, mas a minha prova de conceito não está funcionando. Eu posso telnet para o e-mail do servidor de correio e de envio que maneira, mas esse script faz com que o servidor de correio para gerar um erro: 501 5.5.4 Invalid Address

#!/usr/bin/ruby

require 'net/smtp'

def send_email(to, subject = "", body = "")
    from = "my@email.com"
    body= "From: #{from}\r\nTo: #{to}\r\nSubject: #{subject}\r\n\r\n#{body}\r\n"

    Net::SMTP.start('192.168.10.213', 25, '192.168.0.218') do |smtp|
        smtp.send_message body, from, to
    end
end

send_email "my@email.com", "test", "blah blah blah"

No meu script real, my@email.com é um email válido. 192.168.10.213 é o servidor de correio e 192.168.0.218 é o meu ip local. Note que eu estou executando o Windows XP, e o servidor de correio é um servidor de troca.

Eu não entendo por telnet funciona com os mesmos valores, mas esse script gera o erro de endereço inválido.

Alguém pode me ajudar?

Editar : O código acima funciona agora bem, eu originalmente deixado de fora as vírgulas na chamada do método final. Eu me sinto como um idiota.

Foi útil?

Solução 3

Você pode acreditar nisso? Eu me sinto como um idiota, eu estou apenas vírgulas na chamada de método faltando ...

send_email "my@email.com", "test", "blah blah blah"

Eu estou envergonhado.

De qualquer forma, o código acima funciona muito bem se alguém estiver interessado. Basta não deixar de fora as vírgulas como eu fiz.

Outras dicas

Verifique se o seu endereço de email real não contém caracteres inválidos. Por exemplo, veja esta questão .

Eu recomendo Action Mailer para enviar e-mails com Ruby. Veja um trecho aqui .

Há um bug em seu código. Um utilizador mal intencionado poderia inserir mais cabeçalhos em seu e-mail usando novas linhas no assunto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top