Простой протокол передачи почты (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, 'me@fromdomain.com', 'test@todomain.com'
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, 'me@fromdomain.com', 'test@todomain.com'
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, 'me@fromdomain.net', ['test@todmain.com'])
end
rescue Exception => e
print "Exception occured: " + e
end
ПРИМЕЧАНИЕ. — Вы можете указать несколько адресатов внутри массива, но они должны быть разделены запятой.