English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
SMTP (Simple Mail Transfer Protocol) - это протокол простого передачи почты, это набор правил, используемых для передачи почты от источника к адресу назначения, он контролирует способ пересылки сообщений.
Ruby предоставляет Net::SMTP для отправки почты и предоставляет два метода new и start:
new Метод имеет два параметра:
имя сервера по умолчанию localhost
номер порта по умолчанию 25
start Метод имеет следующие параметры:
server - IP SMTP сервера, по умолчанию localhost
port - Порт, по умолчанию 25
domain - Домен отправителя почты, по умолчанию ENV["HOSTNAME"]
account - Имя пользователя, по умолчанию nil
password - Пароль пользователя, по умолчанию nil
authtype - Тип проверки, по умолчанию: cram_md5
Пример метода создания объекта SMTP, который вызывает sendmail, с параметрами如下:
source - Строка или массив, или что-то, что возвращает каждый итератор в любое время.
sender - Строка,出现的电子邮件表单.
recipients - Строка или массив строк, представляющие адреса получателей.
Ниже приведен простой скрипт на Ruby для отправки писем:
require 'net/smtp' message = <<MESSAGE_END От: Частное лицо <[email protected]> Кому: Пользователь теста <[email protected]> Тема: тест SMTP-почты Это тестовое электронное письмо. MESSAGE_END begin smtp.send_message message, '[email protected]', '[email protected]' end
В предыдущем примере был создан базовый электронный адрес, обратите внимание на правильный формат заголовка. Электронное письмо должно содержать поля From, To и Subject, между текстом и заголовками должна быть пустая строка.
Для подключения к локальному SMTP-серверу с помощью Net::SMTP используйте метод send_message для отправки писем, передавая адрес отправителя и адрес получателя в качестве параметров.
Если у вас нет SMTP-сервера, работающего на вашем компьютере, вы можете использовать Net::SMTP для связи с удаленным SMTP-сервером. Если вы используете сетевую почтовую службу (например, Hotmail или Yahoo Mail), ваш провайдер электронной почты предоставит вам подробности о сервере отправки писем:
Net::SMTP.start('mail.your-domain.com')
Следующий код подключения к почтовому серверу с主机 mail.your-domain.com и портом 25, если необходимо ввести имя пользователя и пароль, код будет следующим:
Net::SMTP.start('mail.your-domain.com', 25, 'localhost', 'username', 'password', :plain)
В предыдущем примере было использовано подключение к почтовому серверу с主机 mail.your-domain.com и портом 25.
Net::SMTP также предоставляет поддержку для отправки HTML-писем.
При отправке электронной почты вы можете установить версию MIME, тип документа и кодировку для отправки HTML-писем.
Следующий пример предназначен для отправки писем в формате HTML:
require 'net/smtp' message = <<MESSAGE_END От: Частное лицо <[email protected]> Кому: Пользователь теста <[email protected]> MIME-Version: 1.0 Тип содержимого: text/html Тема: тест SMTP-почты Это электронное письмо, которое будет отправлено в формате HTML <b>This is HTML message.</b> <h1>This is headline.</h1> MESSAGE_END begin 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" # 读取文件并编码为base64格式 filecontent = File.read(filename) encodedcontent = [filecontent].pack("m") # base64 marker = "AUNIQUEMARKER" body =<<EOF This is a test email to send an attachement. --#{marker}-- # 定义主要的头部信息 part1 =<<EOF From: Private Person <[email protected]> To: A Test User <[email protected]> Subject: Sending Attachement MIME-Version: 1.0 Content-Type: multipart/mixed; boundary=#{marker} --#{marker} --#{marker}-- # 定义消息动作 part2 =<<EOF Content-Type: text/plain Content-Transfer-Encoding:8bit #{body} --#{marker} --#{marker}-- # 定义附件部分 part3 =<<EOF Content-Type:.multipart/mixed; name=\"#{filename}\" Content-Transfer-Encoding:base64 Content-Disposition: attachment; filename="#{filename}" Content-Disposition: attachment; filename="#{filename}" #{encodedcontent} --#{marker}-- EOF mailtext = part1 + part2 + part3 # Отправка почты begin Net::SMTP.start('localhost') do |smtp| ['[email protected]']) end rescue Exception => e print "Exception occurred: " + e end
Внимание:Вы можете указать несколько адресов для отправки, но их нужно разделить запятыми.