29 lines
563 B
Elixir
29 lines
563 B
Elixir
defmodule Newsletter do
|
|
def read_emails(path) do
|
|
File.read!(path) |> String.split("\n", trim: true)
|
|
end
|
|
|
|
def open_log(path) do
|
|
File.open!(path, [:write])
|
|
end
|
|
|
|
def log_sent_email(pid, email) do
|
|
IO.puts(pid, "#{email}")
|
|
end
|
|
|
|
def close_log(pid) do
|
|
File.close(pid)
|
|
end
|
|
|
|
def send_newsletter(emails_path, log_path, send_fun) do
|
|
log = open_log(log_path)
|
|
read_emails(emails_path)
|
|
|> Enum.map(fn email ->
|
|
with :ok <- send_fun.(email) do
|
|
log_sent_email(log, email)
|
|
end
|
|
end)
|
|
close_log(log)
|
|
end
|
|
end
|