33 lines
594 B
Elixir
33 lines
594 B
Elixir
defmodule Newsletter do
|
|
def read_emails(path) do
|
|
path
|
|
|> File.stream!()
|
|
|> Stream.map(&String.trim/1)
|
|
|> Enum.to_list()
|
|
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_pid = open_log(log_path)
|
|
|
|
emails_path
|
|
|> read_emails()
|
|
|> Enum.map(fn email ->
|
|
if send_fun.(email) == :ok, do: log_sent_email(log_pid, email)
|
|
end)
|
|
|
|
close_log(log_pid)
|
|
end
|
|
end
|