Вам понадобится адрес электронной почты, используя домен с MX-сервером, который контролирует ваш системный администратор. Это может быть поддомен вашего основного домена. Затем вы настраиваете программное обеспечение MTA (Exim, Postfix ... надеюсь, не qMail!) Для передачи этой электронной почты в Rails:
http://guides.rubyonrails.org/action_mailer_basics.html#receiving-emails
Если адаптер MTA не установлен на том же сервере, что и само приложение rails, вам придется направить электронное письмо на небольшой специальный сценарий пересылки, который выполняет что-то вроде отправки почты в ваше приложение, где Затем вы вручную передаете это своей почтовой программе.
В вашем почтовом ящике у вас есть доступ ко всем заголовкам, телу, вложениям и т. Д. Если вы добавили в тему несколько уникальных идентификаторов или адрес для ответа, вы можете принять решение о том, какой почтовый ящик создать для отправки почта на адрес получателя.
Мы еще не сделали этого, но собираемся сделать это по тем же причинам. Это может быть немного над вашей головой, если вы не знакомы с настройкой MTA, однако. У вас есть системный администратор, которому вы можете выполнить это задание?
На уровне кода я бы делал это:
- Пользователь A (id = 1234) отправляет электронное письмо пользователю B (id = 5678)
Отправьте электронное письмо с любого адреса, который вам нужен, но установите для Reply-To:
что-то вроде Reply-To: <mail-1234-5678-abcdefabcd1234567890abcdefabcdef@usermessages.your-domain.com>
Это абсолютно ключ к этой работе. Он включает в себя идентификатор отправителя, идентификатор получателя и контрольную сумму для предотвращения подделки. Контрольная сумма может быть сгенерирована из соли, уникальной для каждого пользователя, и просто:
checksum = Digest::MD5.hexdigest("#{sender.id}-#{recipient.id}-#{sender.mailer_salt}")
Теперь, когда вы получаете ответ через MX, который вы настроили для своего домена «usermessages.your-domain.com», первое, что вы делаете, это идентифицируете отправителя и получателя, проанализировав поле To:
, Вы можете легко определить, кто является отправителем и получателем, split
. Затем вы можете сгенерировать контрольную сумму и убедиться, что она совпадает, чтобы гарантировать, что кто-то не пытается злонамеренно отправить почту, как если бы она была от другого пользователя.
После того, как вы выяснили вовлеченных пользователей, продолжайте и отправьте еще одно электронное письмо с одним из этих специальных Reply-To:
заголовков (с перевернутым идентификатором и дайджестом, очевидно, с использованием другой соли).
Это очень элементарный, но совершенно функциональный пример. Вы можете поместить этот дайджест куда угодно, при условии, что он будет сохранен при возвращении ответа (что делает заголовок Reply-To:
подходящим. Некоторые службы используют вместо него строку темы.
Я бы не стал делать солью нечто контролируемое пользователем, такое как хэш пароля пользователя, поскольку, если пользователь изменяет эту информацию (изменяет свой пароль), контрольная сумма больше не будет проверяться.