Учебники

Отправка электронной почты с использованием Ruby — SMTP

Простой протокол передачи почты (SMTP) — это протокол, который обрабатывает отправку электронной почты и маршрутизацию электронной почты между почтовыми серверами.

Ruby предоставляет класс Net :: SMTP для соединения на стороне клиента по протоколу SMTP и предоставляет два метода класса: новый и запуск .

  • Новый принимает два параметра —

    • Имя сервера по умолчанию для localhost.

    • Номер порта по умолчанию для известного порта 25.

  • Метод запуска принимает эти параметры —

    • Сервер — IP-имя SMTP-сервера, по умолчанию localhost.

    • Порт — номер порта, по умолчанию 25.

    • Домен — Домен отправителя почты, по умолчанию ENV [«HOSTNAME»].

    • Учетная запись — Имя пользователя, по умолчанию ноль.

    • Парольпароль пользователя, по умолчанию ноль.

    • Authtype — тип авторизации, по умолчанию — cram_md5 .

Новый принимает два параметра —

Имя сервера по умолчанию для localhost.

Номер порта по умолчанию для известного порта 25.

Метод запуска принимает эти параметры —

Сервер — IP-имя SMTP-сервера, по умолчанию localhost.

Порт — номер порта, по умолчанию 25.

Домен — Домен отправителя почты, по умолчанию ENV [«HOSTNAME»].

Учетная запись — Имя пользователя, по умолчанию ноль.

Парольпароль пользователя, по умолчанию ноль.

Authtype — тип авторизации, по умолчанию — cram_md5 .

У объекта SMTP есть метод экземпляра, называемый sendmail, который обычно используется для отправки сообщения по почте. Требуется три параметра —

  • Источник — строка или массив или что-либо, каждый из которых возвращает по одной строке за раз.

  • Отправитель — строка, которая появится в поле « from» электронного письма.

  • Получатели — строка или массив строк, представляющих адресатов получателей.

Источник — строка или массив или что-либо, каждый из которых возвращает по одной строке за раз.

Отправитель — строка, которая появится в поле « from» электронного письма.

Получатели — строка или массив строк, представляющих адресатов получателей.

пример

Вот простой способ отправить одно письмо, используя скрипт Ruby. Попробуйте один раз —

require 'net/smtp'

message = <<MESSAGE_END
From: Private Person <me@fromdomain.com>
To: A Test User <test@todomain.com>
Subject: SMTP e-mail test

This is a test e-mail message.
MESSAGE_END

Net::SMTP.start('localhost') do |smtp|
  smtp.send_message message, '[email protected]', '[email protected]'
end

Здесь вы разместили в сообщении основную электронную почту, используя документ, стараясь правильно отформатировать заголовки. Для писем требуются заголовки От , Кому и Тема , отделенные от основной части письма пустой строкой.

Для отправки почты вы используете Net :: SMTP для подключения к SMTP-серверу на локальном компьютере, а затем используете метод send_message вместе с сообщением, адресом от и адресом назначения в качестве параметров (даже если адреса от и до в самой электронной почте они не всегда используются для маршрутизации почты).

Если вы не используете SMTP-сервер на своем компьютере, вы можете использовать Net :: SMTP для связи с удаленным SMTP-сервером. Если вы не используете службу веб-почты (например, Hotmail или Yahoo! Mail), ваш поставщик электронной почты предоставит вам информацию о сервере исходящей почты, которую вы можете предоставить Net :: SMTP, следующим образом:

Net::SMTP.start('mail.your-domain.com')

Эта строка кода подключается к SMTP-серверу через порт 25 mail.your-domain.com без использования имени пользователя или пароля. Если вам нужно, вы можете указать номер порта и другие детали. Например —

Net::SMTP.start('mail.your-domain.com', 
                25, 
                'localhost', 
                'username', 'password' :plain)

Этот пример подключается к SMTP-серверу по адресу mail.your-domain.com, используя имя пользователя и пароль в текстовом формате. Он идентифицирует имя хоста клиента как localhost.

Отправка электронной почты в формате HTML с использованием Ruby

Когда вы отправляете текстовое сообщение с использованием Ruby, весь контент будет обрабатываться как простой текст. Даже если вы включите теги HTML в текстовое сообщение, оно будет отображаться как простой текст, и теги HTML не будут отформатированы в соответствии с синтаксисом HTML. Но в Ruby Net :: SMTP предусмотрена возможность отправки HTML-сообщения как фактического HTML-сообщения.

При отправке сообщения электронной почты вы можете указать версию Mime, тип содержимого и набор символов для отправки электронной почты в формате HTML.

пример

Ниже приведен пример отправки содержимого HTML в виде электронного письма. Попробуйте один раз —

require 'net/smtp'

message = <<MESSAGE_END
From: Private Person <me@fromdomain.com>
To: A Test User <test@todomain.com>
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP e-mail test

This is an e-mail message to be sent in HTML format

<b>This is HTML message.</b>
<h1>This is headline.</h1>
MESSAGE_END

Net::SMTP.start('localhost') do |smtp|
   smtp.send_message message, '[email protected]', '[email protected]'
end

Отправка вложений по электронной почте

Для отправки электронного письма со смешанным содержимым необходимо установить заголовок Content-type в multipart / mixed . Тогда разделы текста и вложения могут быть указаны в границах .

Граница начинается с двух дефисов, за которыми следует уникальный номер, который не может появиться в части сообщения электронной почты. Окончательная граница, обозначающая последний раздел письма, также должна заканчиваться двумя дефисами.

Прикрепленные файлы должны быть закодированы с помощью функции pack («m»), чтобы кодирование base64 перед передачей.

пример

Ниже приведен пример, который отправит файл /tmp/test.txt в качестве вложения.

require 'net/smtp'

filename = "/tmp/test.txt"
# Read a file and encode it into base64 format
filecontent = File.read(filename)
encodedcontent = [filecontent].pack("m")   # base64

marker = "AUNIQUEMARKER"
body = <<EOF
This is a test email to send an attachement.
EOF

# Define the main headers.
part1 = <<EOF
From: Private Person <me@fromdomain.net>
To: A Test User <test@todmain.com>
Subject: Sending Attachement
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary = #{marker}
--#{marker}
EOF

# Define the message action
part2 = <<EOF
Content-Type: text/plain
Content-Transfer-Encoding:8bit

#{body}
--#{marker}
EOF

# Define the attachment section
part3 = <<EOF
Content-Type: multipart/mixed; name = \"#{filename}\"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename = "#{filename}"

#{encodedcontent}
--#{marker}--
EOF

mailtext = part1 + part2 + part3

# Let's put our code in safe area
begin 
   Net::SMTP.start('localhost') do |smtp|
      smtp.sendmail(mailtext, '[email protected]', ['[email protected]'])
   end
rescue Exception => e  
   print "Exception occured: " + e  
end  

ПРИМЕЧАНИЕ. — Вы можете указать несколько адресатов внутри массива, но они должны быть разделены запятой.