Domanda

Sto cercando di inviare e-mail con uno script Ruby, ma la mia prova del concetto non funziona. Posso telnet al server di posta e inviare la posta in quel modo, ma questo script provoca un errore nel server di posta: 501 5.5.4 Indirizzo non valido

#!/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"

Nel mio attuale script, my@email.com è un'e-mail valida. 192.168.10.213 è il server di posta e 192.168.0.218 è il mio IP locale. Nota che sto usando Windows XP e il server di posta è un server Exchange.

Non capisco perché telnet funzioni con gli stessi valori, ma questo script genera l'errore di indirizzo non valido.

Qualcuno può aiutarmi?

MODIFICA : il codice sopra riportato ora funziona correttamente, inizialmente avevo escluso le virgole nella chiamata del metodo finale. Mi sento un idiota.

È stato utile?

Soluzione 3

Riesci a crederci? Mi sento un idiota, mi mancano solo le virgole nella chiamata del metodo ...

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

Sono imbarazzato.

Comunque, il codice sopra funziona alla grande se qualcuno è interessato. Non tralasciare le virgole come ho fatto io.

Altri suggerimenti

Assicurati che il tuo vero indirizzo email non contenga caratteri non validi. Ad esempio, vedi questa domanda .

Consiglierei Action Mailer per l'invio di mail con Ruby. Guarda uno snippet qui .

C'è un bug nel tuo codice. Un utente malintenzionato potrebbe inserire più intestazioni nella tua e-mail utilizzando le nuove righe nell'oggetto.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top