スポンサーリンク

2016年2月8日

[Elixir]Send mail from Elixir (Using Mailman Library)

Goal

  • ElixirのMailmanライブラリを使ってメールを作成し送信する

Dev-Environment

OS: Windows8.1
Erlang: Eshell V7.2.1, OTP-Version 18
Elixir: v1.2.0
  • Mailman: v0.2.1
Ruby: v2.2.3
  • Mailcatcher: v0.6.1

Wait a minute

Elixirからライブラリを使ってメールを送ってみます。
今回使うのは、Mailmanと言うライブラリを使って送ります。
当初は、Gmailに送りたかったのですが、
実力不足によりローカルで確認するところまでしかできませんでした。

Index

Send mail from Elixir (Using Mailman Library)
|> Before you start
|> Using

Before you start

プロジェクトの作成を行う。

Example:

> cd 作業ディレクトリ

> mix new mailman_sample
...
> cd mailman_sample

> mix test
...
ライブラリの取得と依存関係の解決を行う。

File: mix.exs

defmodule MailmanSample.Mixfile do
  ...

  defp deps do
    [{:mailman, "~> 0.2.1"}]
  end
end

> mix deps.get
...
> mix compile
...
RubyのMailCatcherを利用してメールの確認を行うため、Rubyのプロジェクトの準備も行う。
> cd 作業ディレクトリ

> mkdir mailcatcher_sample

> cd mailcatcher_sample

> bundle init
...
> mailcatcher
Starting MailCatcher
==> smtp://127.0.0.1:1025
==> http://127.0.0.1:1080

Using

メールを送ってみます。

File: lib/mailman_sample.ex

defmodule MailmanSample do
  def deliver(email) do
    Mailman.deliver(email, config)
  end

  def config do
    %Mailman.Context {
      config: %Mailman.LocalSmtpConfig {port: 1025},
      composer: %Mailman.EexComposeConfig {}
    }
  end

  Mailman.LocalServer.start 1025

  def testing_email do
    %Mailman.Email {
      subject: "Hello Mailman!",
      from: "mailman@elixir.com",
      to: ["Takeshi00Miyamoto@gmail.com"],
      cc: [],
      bcc: [],
      data: [name: "darui"],
      text: "Hello! <%= name %> These are Unicode: qżźół",
      html: """
        <html>
          <body>
            <b>Hello! <%= name %></b> These are Unicode: qżźół
          </body>
        </html>
      """
    }
  end
end

iex> MailmanSample.deliver MailmanSample.testing_email
{:ok,
 "From: mailman@elixir.com\r\nTo: Takeshi00miyamoto <Takeshi00Miyamoto@gmail.com>\r\nSubject: Hello Mailman!\r\nreply-to: \r\nContent-Type: multipart/alternative;\r\n\tboundary=\"_
=1r1b3r0q0l4g4p4k2a5q094d2n6i6b1u=_\"\r\nMIME-Version: 1.0\r\nDate: Mon, 8 Feb 2016 21:12:46 +0900\r\nMessage-ID: <8c7a9dd93af3ce1f9e50863dbf9dfe31@Takeshi00>\r\n\r\n\r\n--_=1r1b3r
0q0l4g4p4k2a5q094d2n6i6b1u=_\r\nContent-Type: text/plain;\r\n\tcharset=utf-8\r\nContent-Disposition: inline\r\nContent-Transfer-Encoding: quoted-printable\r\n\r\nHello! darui These
 are Unicode: q=C5=BC=C5=BA=C3=B3=C5=82\r\n--_=1r1b3r0q0l4g4p4k2a5q094d2n6i6b1u=_\r\nContent-Type: text/html;\r\n\tcharset=utf-8\r\nContent-Disposition: inline\r\nContent-Transfer-
Encoding: quoted-printable\r\n\r\n  <html>=0A    <body>=0A      <b>Hello! darui</b> These are Unicode: =\r\nq=C5=BC=C5=BA=C3=B3=C5=82=0A    </body>=0A  </html>=0A\r\n--_=1r1b3r0q0l
4g4p4k2a5q094d2n6i6b1u=_--\r\n"}
ごちゃごちゃといろいろ出ていますが、:okが出ているので大丈夫でしょう。
Mailcatcherの方を確認してみます。
> mailcatcher
Starting MailCatcher
==> smtp://127.0.0.1:1025
==> http://127.0.0.1:1080
==> SMTP: Received message from '<mailman@elixir.com>' (871 bytes)
うん、来てますね。
気になる人は、MailcatcherのWebUIから確認してみてください
デフォルトなら”http://127.0.0.1:1080"にアクセスすれば、先ほど送ったメールが確認できます。

Speaking to oneself

何とかローカルでは、送ったメールを確認することができました。
自分のGoogleアカウントにメールが届くのはいつの日か…
しかし、このくらいのことやるのに一日潰すとか…orz

Bibliography

人気の投稿