initial commit
This commit is contained in:
commit
a7a13da6c3
5
.gitignore
vendored
Normal file
5
.gitignore
vendored
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
/_build
|
||||||
|
/cover
|
||||||
|
/deps
|
||||||
|
erl_crash.dump
|
||||||
|
*.ez
|
54
README.md
Normal file
54
README.md
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
# Mailex
|
||||||
|
|
||||||
|
Simple wrapper around gen_smtp for sending emails.
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
If [available in Hex](https://hex.pm/docs/publish), the package can be installed as:
|
||||||
|
|
||||||
|
1. Add mailex to your list of dependencies in `mix.exs`:
|
||||||
|
|
||||||
|
def deps do
|
||||||
|
[{:mailex, "~> 0.0.1"}]
|
||||||
|
end
|
||||||
|
|
||||||
|
2. Ensure mailex is started before your application:
|
||||||
|
|
||||||
|
def application do
|
||||||
|
[applications: [:mailex]]
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
To create an email:
|
||||||
|
|
||||||
|
email = %Mailex.Email{
|
||||||
|
from: %Mailex.Address{name: "Dejan Strbac", address: "me@dejanstrbac.com"},
|
||||||
|
to: [%Mailex.Address{name: "Dejo", address: "dejan.strbac@gmail.com"}],
|
||||||
|
subject: "Hi there",
|
||||||
|
text: "Hello World",
|
||||||
|
attachments: [Mailex.Attachment.inline!("test/data/logo.gif")]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
To render it:
|
||||||
|
|
||||||
|
Mailex.Render.render(email)
|
||||||
|
|
||||||
|
|
||||||
|
To dump emails to console, just deliver without config:
|
||||||
|
|
||||||
|
Mailex.deliver(email)
|
||||||
|
|
||||||
|
|
||||||
|
To use a smtp server, provide settings:
|
||||||
|
|
||||||
|
|
||||||
|
Mailex.deliver(email, [
|
||||||
|
relay: "smtp.migadu.com",
|
||||||
|
username: "USERNAME",
|
||||||
|
password: "PASSWORD",
|
||||||
|
port: 587,
|
||||||
|
tls: :always
|
||||||
|
ssl: true,
|
||||||
|
auth: :always
|
||||||
|
])
|
30
config/config.exs
Normal file
30
config/config.exs
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
# This file is responsible for configuring your application
|
||||||
|
# and its dependencies with the aid of the Mix.Config module.
|
||||||
|
use Mix.Config
|
||||||
|
|
||||||
|
# This configuration is loaded before any dependency and is restricted
|
||||||
|
# to this project. If another project depends on this project, this
|
||||||
|
# file won't be loaded nor affect the parent project. For this reason,
|
||||||
|
# if you want to provide default values for your application for
|
||||||
|
# 3rd-party users, it should be done in your "mix.exs" file.
|
||||||
|
|
||||||
|
# You can configure for your application as:
|
||||||
|
#
|
||||||
|
# config :mailex, key: :value
|
||||||
|
#
|
||||||
|
# And access this configuration in your application as:
|
||||||
|
#
|
||||||
|
# Application.get_env(:mailex, :key)
|
||||||
|
#
|
||||||
|
# Or configure a 3rd-party app:
|
||||||
|
#
|
||||||
|
# config :logger, level: :info
|
||||||
|
#
|
||||||
|
|
||||||
|
# It is also possible to import configuration files, relative to this
|
||||||
|
# directory. For example, you can emulate configuration per environment
|
||||||
|
# by uncommenting the line below and defining dev.exs, test.exs and such.
|
||||||
|
# Configuration from the imported file will override the ones defined
|
||||||
|
# here (which is why it is important to import them last).
|
||||||
|
#
|
||||||
|
# import_config "#{Mix.env}.exs"
|
348
dejan.eml
Normal file
348
dejan.eml
Normal file
@ -0,0 +1,348 @@
|
|||||||
|
From: Dejan Strbac <dejan@migadu.com>
|
||||||
|
To: Dejan <dejan@strbac.com>, Dex <dejan@migadu.com>
|
||||||
|
Subject:
|
||||||
|
Cc: Dejan <dejan@strbac.com>, Dex <dejan@migadu.com>
|
||||||
|
Bcc: Dejan <dejan@strbac.com>, Dex <dejan@migadu.com>
|
||||||
|
Reply-To: Dejan <dejan@strbac.com>, Dex <dejan@migadu.com>
|
||||||
|
Content-Type: multipart/mixed;
|
||||||
|
boundary="_=4d394y4p3v1f036r2w0g3b6r4m43364a=_"
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Date: Wed, 25 Nov 2015 12:59:06 +0100
|
||||||
|
Message-ID: <e50255c45c68c4d19a12ac539aea1c7c@dejans-mbp>
|
||||||
|
|
||||||
|
|
||||||
|
--_=4d394y4p3v1f036r2w0g3b6r4m43364a=_
|
||||||
|
Content-Type: image/gif
|
||||||
|
Content-Disposition: attachment;
|
||||||
|
filename=logo.gif
|
||||||
|
Content-Transfer-Encoding: base64
|
||||||
|
|
||||||
|
R0lGODlhAQFYAPf2AD+e1gAlPYiZpLvFyx+Oz0Rfce7w8hE0SpmosczT2DNRZGZ8iyJCV93i5XeL
|
||||||
|
mFVufqq2vhSIzBGHzKPQ61Gn2T6d1SCOzzyc1RCGyxKHzBOIzEyk2E+m2fz9/haJzbjb8BWJzT2d
|
||||||
|
1SqT0Uii2CiS0fj7/UGf1jSY0yGPz4C/5PX6/ZzN6lCm2SaR0ECe1q/X7v3+/1So2jqb1drs90ah
|
||||||
|
1xeKzcPh8hqLziSQ0Pr8/mSx3iWR0CeS0C6V0huMzqnT7E2l2RmLzTaZ1IbC5VKn2kOg1lOo2ozF
|
||||||
|
5jCW0iKPzx2Nzjia1Faq2/n8/nm74lmr21qs216u3CmT0U6l2aDP62ay3uDv+Lba74rE5nG34J7O
|
||||||
|
6rTZ74jD5Y/G50Wh13O44ZrM6Vyt3C2V0lir2yOQ0DGX0/f7/YG/5LHY7vH4/ByMzhiKzXy94x6N
|
||||||
|
zmq0336+47LY7p3N6o7G5zKX09Tp9jWZ0zea1Nns95HH52y13+n0+sbi8+r0+uby+iuU0crk9H29
|
||||||
|
483m9KTR68vl9GWx3kei18/n9WGv3fL4/KjT7IvE5pTJ6JfK6Wu03yyU0Umj2Ha64S+W0r7e8Uuk
|
||||||
|
2Eqj2PP5/ILA5EKf1qzV7XC34Oz1+7nc8KrU7fv9/nW54Veq2zOY0+/3/OPx+eTx+eLw+VWp2sDf
|
||||||
|
8Xu842iz3t3u+GOw3cnk8+jz+tXq9oXB5Tuc1c7m9JXJ6NDn9YnD5tHo9USg13i74jmb1I3F5qfS
|
||||||
|
7Fus3LXa74PA5HK44YfC5Xq84vb6/WKw3ZnL6XS54b/f8Xe64l+u3Lfb72ey3sTh8vT5/Wmz32Cv
|
||||||
|
3aHP6+v1++fz+r3e8ZDH57zd8dfr9sLg8szl9G624KLQ66XR7JbK6N/v+LDX7oTB5O72+5vM6dbq
|
||||||
|
9u32+6bS7JPI6JLI5+Xy+W214LPZ797u+Nzt97vd8KvV7brc8PD3/JjL6Z/O6sjj82+24MHg8q7W
|
||||||
|
7l2t3H++4w+Gy////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEA
|
||||||
|
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
|
||||||
|
|
||||||
|
--_=4d394y4p3v1f036r2w0g3b6r4m43364a=_
|
||||||
|
Content-Type: text/plain;
|
||||||
|
charset=us-ascii
|
||||||
|
Content-Disposition: inline
|
||||||
|
Content-Transfer-Encoding: quoted-printable
|
||||||
|
|
||||||
|
Hello World
|
||||||
|
--_=4d394y4p3v1f036r2w0g3b6r4m43364a=_--
|
33
lib/mailex.ex
Normal file
33
lib/mailex.ex
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
defmodule Mailex do
|
||||||
|
|
||||||
|
@config_defaults [
|
||||||
|
relay: nil,
|
||||||
|
username: "",
|
||||||
|
password: "",
|
||||||
|
port: 25,
|
||||||
|
ssl: false,
|
||||||
|
tls: :never,
|
||||||
|
auth: :always
|
||||||
|
]
|
||||||
|
|
||||||
|
def deliver(email, config \\ []) do
|
||||||
|
config = Keyword.merge(@config_defaults, config)
|
||||||
|
|
||||||
|
message = email |> Mailex.Render.render
|
||||||
|
from = email.from |> Mailex.Address.envelope_format
|
||||||
|
to = email.to |> Mailex.Address.envelope_format
|
||||||
|
|
||||||
|
if Keyword.get(config, :relay) do
|
||||||
|
envelope = { from, to, message }
|
||||||
|
case :gen_smtp_client.send_blocking(envelope, config) do
|
||||||
|
{ :error, msg } -> { :error, msg }
|
||||||
|
msg -> { :ok, msg }
|
||||||
|
end
|
||||||
|
else
|
||||||
|
IO.puts "\n\n[[[ Mailex ]]]\n\nFROM: #{from}\nTO: #{to}\n"
|
||||||
|
IO.puts "RAW START -------\n#{message}\nRAW END -------"
|
||||||
|
{:ok, "dumped to console"}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
end
|
32
lib/mailex/address.ex
Normal file
32
lib/mailex/address.ex
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
defmodule Mailex.Address do
|
||||||
|
defstruct name: nil, address: nil
|
||||||
|
|
||||||
|
|
||||||
|
def rfc_822_format(emails) when is_list(emails), do:
|
||||||
|
emails |> Enum.map(&rfc_822_format(&1))
|
||||||
|
|
||||||
|
|
||||||
|
def rfc_822_format(email) when is_map(email) do
|
||||||
|
if email.name do
|
||||||
|
"#{email.name} <#{email.address}>"
|
||||||
|
else
|
||||||
|
name = email.address |>
|
||||||
|
String.split("@") |>
|
||||||
|
List.first |>
|
||||||
|
String.split(~r/([^\w\s]|_)/) |>
|
||||||
|
Enum.map(&String.capitalize/1) |>
|
||||||
|
Enum.join " "
|
||||||
|
"#{name} <#{email.address}>"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def envelope_format(emails) when is_list(emails), do:
|
||||||
|
emails |> Enum.map(&envelope_format(&1))
|
||||||
|
|
||||||
|
|
||||||
|
def envelope_format(email) when is_map(email), do:
|
||||||
|
"<#{email.address}>"
|
||||||
|
|
||||||
|
|
||||||
|
end
|
694
lib/mailex/attachment.ex
Normal file
694
lib/mailex/attachment.ex
Normal file
@ -0,0 +1,694 @@
|
|||||||
|
defmodule Mailex.Attachment do
|
||||||
|
|
||||||
|
defstruct filename: nil, type: nil, data: nil
|
||||||
|
|
||||||
|
@mime_types [
|
||||||
|
{ ".3dm", "x-world", "x-3dmf" },
|
||||||
|
{ ".3dmf", "x-world", "x-3dmf" },
|
||||||
|
{ ".a", "application", "octet-stream" },
|
||||||
|
{ ".aab", "application", "x-authorware-bin" },
|
||||||
|
{ ".aam", "application", "x-authorware-map" },
|
||||||
|
{ ".aas", "application", "x-authorware-seg" },
|
||||||
|
{ ".abc", "text", "vnd.abc" },
|
||||||
|
{ ".acgi", "text", "html" },
|
||||||
|
{ ".afl", "video", "animaflex" },
|
||||||
|
{ ".ai", "application", "postscript" },
|
||||||
|
{ ".aif", "audio", "aiff" },
|
||||||
|
{ ".aif", "audio", "x-aiff" },
|
||||||
|
{ ".aifc", "audio", "aiff" },
|
||||||
|
{ ".aifc", "audio", "x-aiff" },
|
||||||
|
{ ".aiff", "audio", "aiff" },
|
||||||
|
{ ".aiff", "audio", "x-aiff" },
|
||||||
|
{ ".aim", "application", "x-aim" },
|
||||||
|
{ ".aip", "text", "x-audiosoft-intra" },
|
||||||
|
{ ".ani", "application", "x-navi-animation" },
|
||||||
|
{ ".aos", "application", "x-nokia-9000-communicator-add-on-software" },
|
||||||
|
{ ".aps", "application", "mime" },
|
||||||
|
{ ".arc", "application", "octet-stream" },
|
||||||
|
{ ".arj", "application", "arj" },
|
||||||
|
{ ".arj", "application", "octet-stream" },
|
||||||
|
{ ".art", "image", "x-jg" },
|
||||||
|
{ ".asf", "video", "x-ms-asf" },
|
||||||
|
{ ".asm", "text", "x-asm" },
|
||||||
|
{ ".asp", "text", "asp" },
|
||||||
|
{ ".asx", "application", "x-mplayer2" },
|
||||||
|
{ ".asx", "video", "x-ms-asf" },
|
||||||
|
{ ".asx", "video", "x-ms-asf-plugin" },
|
||||||
|
{ ".au", "audio", "basic" },
|
||||||
|
{ ".au", "audio", "x-au" },
|
||||||
|
{ ".avi", "application", "x-troff-msvideo" },
|
||||||
|
{ ".avi", "video", "avi" },
|
||||||
|
{ ".avi", "video", "msvideo" },
|
||||||
|
{ ".avi", "video", "x-msvideo" },
|
||||||
|
{ ".avs", "video", "avs-video" },
|
||||||
|
{ ".bcpio", "application", "x-bcpio" },
|
||||||
|
{ ".bin", "application", "mac-binary" },
|
||||||
|
{ ".bin", "application", "macbinary" },
|
||||||
|
{ ".bin", "application", "octet-stream" },
|
||||||
|
{ ".bin", "application", "x-binary" },
|
||||||
|
{ ".bin", "application", "x-macbinary" },
|
||||||
|
{ ".bm", "image", "bmp" },
|
||||||
|
{ ".bmp", "image", "bmp" },
|
||||||
|
{ ".bmp", "image", "x-windows-bmp" },
|
||||||
|
{ ".boo", "application", "book" },
|
||||||
|
{ ".book", "application", "book" },
|
||||||
|
{ ".boz", "application", "x-bzip2" },
|
||||||
|
{ ".bsh", "application", "x-bsh" },
|
||||||
|
{ ".bz", "application", "x-bzip" },
|
||||||
|
{ ".bz2", "application", "x-bzip2" },
|
||||||
|
{ ".c", "text", "plain" },
|
||||||
|
{ ".c", "text", "x-c" },
|
||||||
|
{ ".c++", "text", "plain" },
|
||||||
|
{ ".cat", "application", "vnd.ms-pki.seccat" },
|
||||||
|
{ ".cc", "text", "plain" },
|
||||||
|
{ ".cc", "text", "x-c" },
|
||||||
|
{ ".ccad", "application", "clariscad" },
|
||||||
|
{ ".cco", "application", "x-cocoa" },
|
||||||
|
{ ".cdf", "application", "cdf" },
|
||||||
|
{ ".cdf", "application", "x-cdf" },
|
||||||
|
{ ".cdf", "application", "x-netcdf" },
|
||||||
|
{ ".cer", "application", "pkix-cert" },
|
||||||
|
{ ".cer", "application", "x-x509-ca-cert" },
|
||||||
|
{ ".cha", "application", "x-chat" },
|
||||||
|
{ ".chat", "application", "x-chat" },
|
||||||
|
{ ".class", "application", "java" },
|
||||||
|
{ ".class", "application", "java-byte-code" },
|
||||||
|
{ ".class", "application", "x-java-class" },
|
||||||
|
{ ".com", "application", "octet-stream" },
|
||||||
|
{ ".com", "text", "plain" },
|
||||||
|
{ ".conf", "text", "plain" },
|
||||||
|
{ ".cpio", "application", "x-cpio" },
|
||||||
|
{ ".cpp", "text", "x-c" },
|
||||||
|
{ ".cpt", "application", "mac-compactpro" },
|
||||||
|
{ ".cpt", "application", "x-compactpro" },
|
||||||
|
{ ".cpt", "application", "x-cpt" },
|
||||||
|
{ ".crl", "application", "pkcs-crl" },
|
||||||
|
{ ".crl", "application", "pkix-crl" },
|
||||||
|
{ ".crt", "application", "pkix-cert" },
|
||||||
|
{ ".crt", "application", "x-x509-ca-cert" },
|
||||||
|
{ ".crt", "application", "x-x509-user-cert" },
|
||||||
|
{ ".csh", "application", "x-csh" },
|
||||||
|
{ ".csh", "text", "x-script.csh" },
|
||||||
|
{ ".css", "application", "x-pointplus" },
|
||||||
|
{ ".css", "text", "css" },
|
||||||
|
{ ".cxx", "text", "plain" },
|
||||||
|
{ ".dcr", "application", "x-director" },
|
||||||
|
{ ".deepv", "application", "x-deepv" },
|
||||||
|
{ ".def", "text", "plain" },
|
||||||
|
{ ".der", "application", "x-x509-ca-cert" },
|
||||||
|
{ ".dif", "video", "x-dv" },
|
||||||
|
{ ".dir", "application", "x-director" },
|
||||||
|
{ ".dl", "video", "dl" },
|
||||||
|
{ ".dl", "video", "x-dl" },
|
||||||
|
{ ".doc", "application", "msword" },
|
||||||
|
{ ".dot", "application", "msword" },
|
||||||
|
{ ".dp", "application", "commonground" },
|
||||||
|
{ ".drw", "application", "drafting" },
|
||||||
|
{ ".dump", "application", "octet-stream" },
|
||||||
|
{ ".dv", "video", "x-dv" },
|
||||||
|
{ ".dvi", "application", "x-dvi" },
|
||||||
|
{ ".dwf", "drawing", "x-dwf, (old)" },
|
||||||
|
{ ".dwf", "model", "vnd.dwf" },
|
||||||
|
{ ".dwg", "application", "acad" },
|
||||||
|
{ ".dwg", "image", "vnd.dwg" },
|
||||||
|
{ ".dwg", "image", "x-dwg" },
|
||||||
|
{ ".dxf", "application", "dxf" },
|
||||||
|
{ ".dxf", "image", "vnd.dwg" },
|
||||||
|
{ ".dxf", "image", "x-dwg" },
|
||||||
|
{ ".dxr", "application", "x-director" },
|
||||||
|
{ ".el", "text", "x-script.elisp" },
|
||||||
|
{ ".elc", "application", "x-bytecode.elisp, (compiled, elisp)" },
|
||||||
|
{ ".elc", "application", "x-elc" },
|
||||||
|
{ ".env", "application", "x-envoy" },
|
||||||
|
{ ".eps", "application", "postscript" },
|
||||||
|
{ ".es", "application", "x-esrehber" },
|
||||||
|
{ ".etx", "text", "x-setext" },
|
||||||
|
{ ".evy", "application", "envoy" },
|
||||||
|
{ ".evy", "application", "x-envoy" },
|
||||||
|
{ ".exe", "application", "octet-stream" },
|
||||||
|
{ ".f", "text", "plain" },
|
||||||
|
{ ".f", "text", "x-fortran" },
|
||||||
|
{ ".f77", "text", "x-fortran" },
|
||||||
|
{ ".f90", "text", "plain" },
|
||||||
|
{ ".f90", "text", "x-fortran" },
|
||||||
|
{ ".fdf", "application", "vnd.fdf" },
|
||||||
|
{ ".fif", "application", "fractals" },
|
||||||
|
{ ".fif", "image", "fif" },
|
||||||
|
{ ".fli", "video", "fli" },
|
||||||
|
{ ".fli", "video", "x-fli" },
|
||||||
|
{ ".flo", "image", "florian" },
|
||||||
|
{ ".flx", "text", "vnd.fmi.flexstor" },
|
||||||
|
{ ".fmf", "video", "x-atomic3d-feature" },
|
||||||
|
{ ".for", "text", "plain" },
|
||||||
|
{ ".for", "text", "x-fortran" },
|
||||||
|
{ ".fpx", "image", "vnd.fpx" },
|
||||||
|
{ ".fpx", "image", "vnd.net-fpx" },
|
||||||
|
{ ".frl", "application", "freeloader" },
|
||||||
|
{ ".funk", "audio", "make" },
|
||||||
|
{ ".g", "text", "plain" },
|
||||||
|
{ ".g3", "image", "g3fax" },
|
||||||
|
{ ".gif", "image", "gif" },
|
||||||
|
{ ".gl", "video", "gl" },
|
||||||
|
{ ".gl", "video", "x-gl" },
|
||||||
|
{ ".gsd", "audio", "x-gsm" },
|
||||||
|
{ ".gsm", "audio", "x-gsm" },
|
||||||
|
{ ".gsp", "application", "x-gsp" },
|
||||||
|
{ ".gss", "application", "x-gss" },
|
||||||
|
{ ".gtar", "application", "x-gtar" },
|
||||||
|
{ ".gz", "application", "x-compressed" },
|
||||||
|
{ ".gz", "application", "x-gzip" },
|
||||||
|
{ ".gzip", "application", "x-gzip" },
|
||||||
|
{ ".gzip", "multipart", "x-gzip" },
|
||||||
|
{ ".h", "text", "plain" },
|
||||||
|
{ ".h", "text", "x-h" },
|
||||||
|
{ ".hdf", "application", "x-hdf" },
|
||||||
|
{ ".help", "application", "x-helpfile" },
|
||||||
|
{ ".hgl", "application", "vnd.hp-hpgl" },
|
||||||
|
{ ".hh", "text", "plain" },
|
||||||
|
{ ".hh", "text", "x-h" },
|
||||||
|
{ ".hlb", "text", "x-script" },
|
||||||
|
{ ".hlp", "application", "hlp" },
|
||||||
|
{ ".hlp", "application", "x-helpfile" },
|
||||||
|
{ ".hlp", "application", "x-winhelp" },
|
||||||
|
{ ".hpg", "application", "vnd.hp-hpgl" },
|
||||||
|
{ ".hpgl", "application", "vnd.hp-hpgl" },
|
||||||
|
{ ".hqx", "application", "binhex" },
|
||||||
|
{ ".hqx", "application", "binhex4" },
|
||||||
|
{ ".hqx", "application", "mac-binhex" },
|
||||||
|
{ ".hqx", "application", "mac-binhex40" },
|
||||||
|
{ ".hqx", "application", "x-binhex40" },
|
||||||
|
{ ".hqx", "application", "x-mac-binhex40" },
|
||||||
|
{ ".hta", "application", "hta" },
|
||||||
|
{ ".htc", "text", "x-component" },
|
||||||
|
{ ".htm", "text", "html" },
|
||||||
|
{ ".html", "text", "html" },
|
||||||
|
{ ".htmls", "text", "html" },
|
||||||
|
{ ".htt", "text", "webviewhtml" },
|
||||||
|
{ ".htx", "text", "html" },
|
||||||
|
{ ".ice", "x-conference", "x-cooltalk" },
|
||||||
|
{ ".ico", "image", "x-icon" },
|
||||||
|
{ ".idc", "text", "plain" },
|
||||||
|
{ ".ief", "image", "ief" },
|
||||||
|
{ ".iefs", "image", "ief" },
|
||||||
|
{ ".iges", "application", "iges" },
|
||||||
|
{ ".iges", "model", "iges" },
|
||||||
|
{ ".igs", "application", "iges" },
|
||||||
|
{ ".igs", "model", "iges" },
|
||||||
|
{ ".ima", "application", "x-ima" },
|
||||||
|
{ ".imap", "application", "x-httpd-imap" },
|
||||||
|
{ ".inf", "application", "inf" },
|
||||||
|
{ ".ins", "application", "x-internett-signup" },
|
||||||
|
{ ".ip", "application", "x-ip2" },
|
||||||
|
{ ".isu", "video", "x-isvideo" },
|
||||||
|
{ ".it", "audio", "it" },
|
||||||
|
{ ".iv", "application", "x-inventor" },
|
||||||
|
{ ".ivr", "i-world", "i-vrml" },
|
||||||
|
{ ".ivy", "application", "x-livescreen" },
|
||||||
|
{ ".jam", "audio", "x-jam" },
|
||||||
|
{ ".jav", "text", "plain" },
|
||||||
|
{ ".jav", "text", "x-java-source" },
|
||||||
|
{ ".java", "text", "plain" },
|
||||||
|
{ ".java", "text", "x-java-source" },
|
||||||
|
{ ".jcm", "application", "x-java-commerce" },
|
||||||
|
{ ".jfif", "image", "jpeg" },
|
||||||
|
{ ".jfif", "image", "pjpeg" },
|
||||||
|
{ ".jfif-tbnl", "image", "jpeg" },
|
||||||
|
{ ".jpe", "image", "jpeg" },
|
||||||
|
{ ".jpe", "image", "pjpeg" },
|
||||||
|
{ ".jpeg", "image", "jpeg" },
|
||||||
|
{ ".jpeg", "image", "pjpeg" },
|
||||||
|
{ ".jpg", "image", "jpeg" },
|
||||||
|
{ ".jpg", "image", "pjpeg" },
|
||||||
|
{ ".jps", "image", "x-jps" },
|
||||||
|
{ ".js", "application", "x-javascript" },
|
||||||
|
{ ".js", "application", "javascript" },
|
||||||
|
{ ".js", "application", "ecmascript" },
|
||||||
|
{ ".js", "text", "javascript" },
|
||||||
|
{ ".js", "text", "ecmascript" },
|
||||||
|
{ ".jut", "image", "jutvision" },
|
||||||
|
{ ".kar", "audio", "midi" },
|
||||||
|
{ ".kar", "music", "x-karaoke" },
|
||||||
|
{ ".ksh", "application", "x-ksh" },
|
||||||
|
{ ".ksh", "text", "x-script.ksh" },
|
||||||
|
{ ".la", "audio", "nspaudio" },
|
||||||
|
{ ".la", "audio", "x-nspaudio" },
|
||||||
|
{ ".lam", "audio", "x-liveaudio" },
|
||||||
|
{ ".latex", "application", "x-latex" },
|
||||||
|
{ ".lha", "application", "lha" },
|
||||||
|
{ ".lha", "application", "octet-stream" },
|
||||||
|
{ ".lha", "application", "x-lha" },
|
||||||
|
{ ".lhx", "application", "octet-stream" },
|
||||||
|
{ ".list", "text", "plain" },
|
||||||
|
{ ".lma", "audio", "nspaudio" },
|
||||||
|
{ ".lma", "audio", "x-nspaudio" },
|
||||||
|
{ ".log", "text", "plain" },
|
||||||
|
{ ".lsp", "application", "x-lisp" },
|
||||||
|
{ ".lsp", "text", "x-script.lisp" },
|
||||||
|
{ ".lst", "text", "plain" },
|
||||||
|
{ ".lsx", "text", "x-la-asf" },
|
||||||
|
{ ".ltx", "application", "x-latex" },
|
||||||
|
{ ".lzh", "application", "octet-stream" },
|
||||||
|
{ ".lzh", "application", "x-lzh" },
|
||||||
|
{ ".lzx", "application", "lzx" },
|
||||||
|
{ ".lzx", "application", "octet-stream" },
|
||||||
|
{ ".lzx", "application", "x-lzx" },
|
||||||
|
{ ".m", "text", "plain" },
|
||||||
|
{ ".m", "text", "x-m" },
|
||||||
|
{ ".m1v", "video", "mpeg" },
|
||||||
|
{ ".m2a", "audio", "mpeg" },
|
||||||
|
{ ".m2v", "video", "mpeg" },
|
||||||
|
{ ".m3u", "audio", "x-mpequrl" },
|
||||||
|
{ ".man", "application", "x-troff-man" },
|
||||||
|
{ ".map", "application", "x-navimap" },
|
||||||
|
{ ".mar", "text", "plain" },
|
||||||
|
{ ".mbd", "application", "mbedlet" },
|
||||||
|
{ ".mc$", "application", "x-magic-cap-package-1.0" },
|
||||||
|
{ ".mcd", "application", "mcad" },
|
||||||
|
{ ".mcd", "application", "x-mathcad" },
|
||||||
|
{ ".mcf", "image", "vasa" },
|
||||||
|
{ ".mcf", "text", "mcf" },
|
||||||
|
{ ".mcp", "application", "netmc" },
|
||||||
|
{ ".me", "application", "x-troff-me" },
|
||||||
|
{ ".mht", "message", "rfc822" },
|
||||||
|
{ ".mhtml", "message", "rfc822" },
|
||||||
|
{ ".mid", "application", "x-midi" },
|
||||||
|
{ ".mid", "audio", "midi" },
|
||||||
|
{ ".mid", "audio", "x-mid" },
|
||||||
|
{ ".mid", "audio", "x-midi" },
|
||||||
|
{ ".mid", "music", "crescendo" },
|
||||||
|
{ ".mid", "x-music", "x-midi" },
|
||||||
|
{ ".midi", "application", "x-midi" },
|
||||||
|
{ ".midi", "audio", "midi" },
|
||||||
|
{ ".midi", "audio", "x-mid" },
|
||||||
|
{ ".midi", "audio", "x-midi" },
|
||||||
|
{ ".midi", "music", "crescendo" },
|
||||||
|
{ ".midi", "x-music", "x-midi" },
|
||||||
|
{ ".mif", "application", "x-frame" },
|
||||||
|
{ ".mif", "application", "x-mif" },
|
||||||
|
{ ".mime", "message", "rfc822" },
|
||||||
|
{ ".mime", "www", "mime" },
|
||||||
|
{ ".mjf", "audio", "x-vnd.audioexplosion.mjuicemediafile" },
|
||||||
|
{ ".mjpg", "video", "x-motion-jpeg" },
|
||||||
|
{ ".mm", "application", "base64" },
|
||||||
|
{ ".mm", "application", "x-meme" },
|
||||||
|
{ ".mme", "application", "base64" },
|
||||||
|
{ ".mod", "audio", "mod" },
|
||||||
|
{ ".mod", "audio", "x-mod" },
|
||||||
|
{ ".moov", "video", "quicktime" },
|
||||||
|
{ ".mov", "video", "quicktime" },
|
||||||
|
{ ".movie", "video", "x-sgi-movie" },
|
||||||
|
{ ".mobileconfig", "application", "x-apple-aspen-config" },
|
||||||
|
{ ".mp2", "audio", "mpeg" },
|
||||||
|
{ ".mp2", "audio", "x-mpeg" },
|
||||||
|
{ ".mp2", "video", "mpeg" },
|
||||||
|
{ ".mp2", "video", "x-mpeg" },
|
||||||
|
{ ".mp2", "video", "x-mpeq2a" },
|
||||||
|
{ ".mp3", "audio", "mpeg3" },
|
||||||
|
{ ".mp3", "audio", "x-mpeg-3" },
|
||||||
|
{ ".mp3", "video", "mpeg" },
|
||||||
|
{ ".mp3", "video", "x-mpeg" },
|
||||||
|
{ ".mpa", "audio", "mpeg" },
|
||||||
|
{ ".mpa", "video", "mpeg" },
|
||||||
|
{ ".mpc", "application", "x-project" },
|
||||||
|
{ ".mpe", "video", "mpeg" },
|
||||||
|
{ ".mpeg", "video", "mpeg" },
|
||||||
|
{ ".mpg", "audio", "mpeg" },
|
||||||
|
{ ".mpg", "video", "mpeg" },
|
||||||
|
{ ".mpga", "audio", "mpeg" },
|
||||||
|
{ ".mpp", "application", "vnd.ms-project" },
|
||||||
|
{ ".mpt", "application", "x-project" },
|
||||||
|
{ ".mpv", "application", "x-project" },
|
||||||
|
{ ".mpx", "application", "x-project" },
|
||||||
|
{ ".mrc", "application", "marc" },
|
||||||
|
{ ".ms", "application", "x-troff-ms" },
|
||||||
|
{ ".mv", "video", "x-sgi-movie" },
|
||||||
|
{ ".my", "audio", "make" },
|
||||||
|
{ ".mzz", "application", "x-vnd.audioexplosion.mzz" },
|
||||||
|
{ ".nap", "image", "naplps" },
|
||||||
|
{ ".naplps", "image", "naplps" },
|
||||||
|
{ ".nc", "application", "x-netcdf" },
|
||||||
|
{ ".ncm", "application", "vnd.nokia.configuration-message" },
|
||||||
|
{ ".nif", "image", "x-niff" },
|
||||||
|
{ ".niff", "image", "x-niff" },
|
||||||
|
{ ".nix", "application", "x-mix-transfer" },
|
||||||
|
{ ".nsc", "application", "x-conference" },
|
||||||
|
{ ".nvd", "application", "x-navidoc" },
|
||||||
|
{ ".o", "application", "octet-stream" },
|
||||||
|
{ ".oda", "application", "oda" },
|
||||||
|
{ ".omc", "application", "x-omc" },
|
||||||
|
{ ".omcd", "application", "x-omcdatamaker" },
|
||||||
|
{ ".omcr", "application", "x-omcregerator" },
|
||||||
|
{ ".p", "text", "x-pascal" },
|
||||||
|
{ ".p10", "application", "pkcs10" },
|
||||||
|
{ ".p10", "application", "x-pkcs10" },
|
||||||
|
{ ".p12", "application", "pkcs-12" },
|
||||||
|
{ ".p12", "application", "x-pkcs12" },
|
||||||
|
{ ".p7a", "application", "x-pkcs7-signature" },
|
||||||
|
{ ".p7c", "application", "pkcs7-mime" },
|
||||||
|
{ ".p7c", "application", "x-pkcs7-mime" },
|
||||||
|
{ ".p7m", "application", "pkcs7-mime" },
|
||||||
|
{ ".p7m", "application", "x-pkcs7-mime" },
|
||||||
|
{ ".p7r", "application", "x-pkcs7-certreqresp" },
|
||||||
|
{ ".p7s", "application", "pkcs7-signature" },
|
||||||
|
{ ".part", "application", "pro_eng" },
|
||||||
|
{ ".pas", "text", "pascal" },
|
||||||
|
{ ".pbm", "image", "x-portable-bitmap" },
|
||||||
|
{ ".pcl", "application", "vnd.hp-pcl" },
|
||||||
|
{ ".pcl", "application", "x-pcl" },
|
||||||
|
{ ".pct", "image", "x-pict" },
|
||||||
|
{ ".pcx", "image", "x-pcx" },
|
||||||
|
{ ".pdb", "chemical", "x-pdb" },
|
||||||
|
{ ".pdf", "application", "pdf" },
|
||||||
|
{ ".pfunk", "audio", "make" },
|
||||||
|
{ ".pfunk", "audio", "make.my.funk" },
|
||||||
|
{ ".pgm", "image", "x-portable-graymap" },
|
||||||
|
{ ".pgm", "image", "x-portable-greymap" },
|
||||||
|
{ ".pic", "image", "pict" },
|
||||||
|
{ ".pict", "image", "pict" },
|
||||||
|
{ ".pkg", "application", "x-newton-compatible-pkg" },
|
||||||
|
{ ".pko", "application", "vnd.ms-pki.pko" },
|
||||||
|
{ ".pl", "text", "plain" },
|
||||||
|
{ ".pl", "text", "x-script.perl" },
|
||||||
|
{ ".plx", "application", "x-pixclscript" },
|
||||||
|
{ ".pm", "image", "x-xpixmap" },
|
||||||
|
{ ".pm", "text", "x-script.perl-module" },
|
||||||
|
{ ".pm4", "application", "x-pagemaker" },
|
||||||
|
{ ".pm5", "application", "x-pagemaker" },
|
||||||
|
{ ".png", "image", "png" },
|
||||||
|
{ ".pnm", "application", "x-portable-anymap" },
|
||||||
|
{ ".pnm", "image", "x-portable-anymap" },
|
||||||
|
{ ".pot", "application", "mspowerpoint" },
|
||||||
|
{ ".pot", "application", "vnd.ms-powerpoint" },
|
||||||
|
{ ".pov", "model", "x-pov" },
|
||||||
|
{ ".ppa", "application", "vnd.ms-powerpoint" },
|
||||||
|
{ ".ppm", "image", "x-portable-pixmap" },
|
||||||
|
{ ".pps", "application", "mspowerpoint" },
|
||||||
|
{ ".pps", "application", "vnd.ms-powerpoint" },
|
||||||
|
{ ".ppt", "application", "mspowerpoint" },
|
||||||
|
{ ".ppt", "application", "powerpoint" },
|
||||||
|
{ ".ppt", "application", "vnd.ms-powerpoint" },
|
||||||
|
{ ".ppt", "application", "x-mspowerpoint" },
|
||||||
|
{ ".ppz", "application", "mspowerpoint" },
|
||||||
|
{ ".pre", "application", "x-freelance" },
|
||||||
|
{ ".prt", "application", "pro_eng" },
|
||||||
|
{ ".ps", "application", "postscript" },
|
||||||
|
{ ".psd", "application", "octet-stream" },
|
||||||
|
{ ".pvu", "paleovu", "x-pv" },
|
||||||
|
{ ".pwz", "application", "vnd.ms-powerpoint" },
|
||||||
|
{ ".py", "text", "x-script.phyton" },
|
||||||
|
{ ".pyc", "applicaiton", "x-bytecode.python" },
|
||||||
|
{ ".qcp", "audio", "vnd.qcelp" },
|
||||||
|
{ ".qd3", "x-world", "x-3dmf" },
|
||||||
|
{ ".qd3d", "x-world", "x-3dmf" },
|
||||||
|
{ ".qif", "image", "x-quicktime" },
|
||||||
|
{ ".qt", "video", "quicktime" },
|
||||||
|
{ ".qtc", "video", "x-qtc" },
|
||||||
|
{ ".qti", "image", "x-quicktime" },
|
||||||
|
{ ".qtif", "image", "x-quicktime" },
|
||||||
|
{ ".ra", "audio", "x-pn-realaudio" },
|
||||||
|
{ ".ra", "audio", "x-pn-realaudio-plugin" },
|
||||||
|
{ ".ra", "audio", "x-realaudio" },
|
||||||
|
{ ".ram", "audio", "x-pn-realaudio" },
|
||||||
|
{ ".ras", "application", "x-cmu-raster" },
|
||||||
|
{ ".ras", "image", "cmu-raster" },
|
||||||
|
{ ".ras", "image", "x-cmu-raster" },
|
||||||
|
{ ".rast", "image", "cmu-raster" },
|
||||||
|
{ ".rexx", "text", "x-script.rexx" },
|
||||||
|
{ ".rf", "image", "vnd.rn-realflash" },
|
||||||
|
{ ".rgb", "image", "x-rgb" },
|
||||||
|
{ ".rm", "application", "vnd.rn-realmedia" },
|
||||||
|
{ ".rm", "audio", "x-pn-realaudio" },
|
||||||
|
{ ".rmi", "audio", "mid" },
|
||||||
|
{ ".rmm", "audio", "x-pn-realaudio" },
|
||||||
|
{ ".rmp", "audio", "x-pn-realaudio" },
|
||||||
|
{ ".rmp", "audio", "x-pn-realaudio-plugin" },
|
||||||
|
{ ".rng", "application", "ringing-tones" },
|
||||||
|
{ ".rng", "application", "vnd.nokia.ringing-tone" },
|
||||||
|
{ ".rnx", "application", "vnd.rn-realplayer" },
|
||||||
|
{ ".roff", "application", "x-troff" },
|
||||||
|
{ ".rp", "image", "vnd.rn-realpix" },
|
||||||
|
{ ".rpm", "audio", "x-pn-realaudio-plugin" },
|
||||||
|
{ ".rt", "text", "richtext" },
|
||||||
|
{ ".rt", "text", "vnd.rn-realtext" },
|
||||||
|
{ ".rtf", "application", "rtf" },
|
||||||
|
{ ".rtf", "application", "x-rtf" },
|
||||||
|
{ ".rtf", "text", "richtext" },
|
||||||
|
{ ".rtx", "application", "rtf" },
|
||||||
|
{ ".rtx", "text", "richtext" },
|
||||||
|
{ ".rv", "video", "vnd.rn-realvideo" },
|
||||||
|
{ ".s", "text", "x-asm" },
|
||||||
|
{ ".s3m", "audio", "s3m" },
|
||||||
|
{ ".saveme", "application", "octet-stream" },
|
||||||
|
{ ".sbk", "application", "x-tbook" },
|
||||||
|
{ ".scm", "application", "x-lotusscreencam" },
|
||||||
|
{ ".scm", "text", "x-script.guile" },
|
||||||
|
{ ".scm", "text", "x-script.scheme" },
|
||||||
|
{ ".scm", "video", "x-scm" },
|
||||||
|
{ ".sdml", "text", "plain" },
|
||||||
|
{ ".sdp", "application", "sdp" },
|
||||||
|
{ ".sdp", "application", "x-sdp" },
|
||||||
|
{ ".sdr", "application", "sounder" },
|
||||||
|
{ ".sea", "application", "sea" },
|
||||||
|
{ ".sea", "application", "x-sea" },
|
||||||
|
{ ".set", "application", "set" },
|
||||||
|
{ ".sgm", "text", "sgml" },
|
||||||
|
{ ".sgm", "text", "x-sgml" },
|
||||||
|
{ ".sgml", "text", "sgml" },
|
||||||
|
{ ".sgml", "text", "x-sgml" },
|
||||||
|
{ ".sh", "application", "x-bsh" },
|
||||||
|
{ ".sh", "application", "x-sh" },
|
||||||
|
{ ".sh", "application", "x-shar" },
|
||||||
|
{ ".sh", "text", "x-script.sh" },
|
||||||
|
{ ".shar", "application", "x-bsh" },
|
||||||
|
{ ".shar", "application", "x-shar" },
|
||||||
|
{ ".shtml", "text", "html" },
|
||||||
|
{ ".shtml", "text", "x-server-parsed-html" },
|
||||||
|
{ ".sid", "audio", "x-psid" },
|
||||||
|
{ ".sit", "application", "x-sit" },
|
||||||
|
{ ".sit", "application", "x-stuffit" },
|
||||||
|
{ ".skd", "application", "x-koan" },
|
||||||
|
{ ".skm", "application", "x-koan" },
|
||||||
|
{ ".skp", "application", "x-koan" },
|
||||||
|
{ ".skt", "application", "x-koan" },
|
||||||
|
{ ".sl", "application", "x-seelogo" },
|
||||||
|
{ ".smi", "application", "smil" },
|
||||||
|
{ ".smil", "application", "smil" },
|
||||||
|
{ ".snd", "audio", "basic" },
|
||||||
|
{ ".snd", "audio", "x-adpcm" },
|
||||||
|
{ ".sol", "application", "solids" },
|
||||||
|
{ ".spc", "application", "x-pkcs7-certificates" },
|
||||||
|
{ ".spc", "text", "x-speech" },
|
||||||
|
{ ".spl", "application", "futuresplash" },
|
||||||
|
{ ".spr", "application", "x-sprite" },
|
||||||
|
{ ".sprite", "application", "x-sprite" },
|
||||||
|
{ ".src", "application", "x-wais-source" },
|
||||||
|
{ ".ssi", "text", "x-server-parsed-html" },
|
||||||
|
{ ".ssm", "application", "streamingmedia" },
|
||||||
|
{ ".sst", "application", "vnd.ms-pki.certstore" },
|
||||||
|
{ ".step", "application", "step" },
|
||||||
|
{ ".stl", "application", "sla" },
|
||||||
|
{ ".stl", "application", "vnd.ms-pki.stl" },
|
||||||
|
{ ".stl", "application", "x-navistyle" },
|
||||||
|
{ ".stp", "application", "step" },
|
||||||
|
{ ".sv4cpio", "application", "x-sv4cpio" },
|
||||||
|
{ ".sv4crc", "application", "x-sv4crc" },
|
||||||
|
{ ".svf", "image", "vnd.dwg" },
|
||||||
|
{ ".svf", "image", "x-dwg" },
|
||||||
|
{ ".svr", "application", "x-world" },
|
||||||
|
{ ".svr", "x-world", "x-svr" },
|
||||||
|
{ ".swf", "application", "x-shockwave-flash" },
|
||||||
|
{ ".t", "application", "x-troff" },
|
||||||
|
{ ".talk", "text", "x-speech" },
|
||||||
|
{ ".tar", "application", "x-tar" },
|
||||||
|
{ ".tbk", "application", "toolbook" },
|
||||||
|
{ ".tbk", "application", "x-tbook" },
|
||||||
|
{ ".tcl", "application", "x-tcl" },
|
||||||
|
{ ".tcl", "text", "x-script.tcl" },
|
||||||
|
{ ".tcsh", "text", "x-script.tcsh" },
|
||||||
|
{ ".tex", "application", "x-tex" },
|
||||||
|
{ ".texi", "application", "x-texinfo" },
|
||||||
|
{ ".texinfo", "application", "x-texinfo" },
|
||||||
|
{ ".text", "application", "plain" },
|
||||||
|
{ ".text", "text", "plain" },
|
||||||
|
{ ".tgz", "application", "gnutar" },
|
||||||
|
{ ".tgz", "application", "x-compressed" },
|
||||||
|
{ ".tif", "image", "tiff" },
|
||||||
|
{ ".tif", "image", "x-tiff" },
|
||||||
|
{ ".tiff", "image", "tiff" },
|
||||||
|
{ ".tiff", "image", "x-tiff" },
|
||||||
|
{ ".tr", "application", "x-troff" },
|
||||||
|
{ ".tsi", "audio", "tsp-audio" },
|
||||||
|
{ ".tsp", "application", "dsptype" },
|
||||||
|
{ ".tsp", "audio", "tsplayer" },
|
||||||
|
{ ".tsv", "text", "tab-separated-values" },
|
||||||
|
{ ".turbot", "image", "florian" },
|
||||||
|
{ ".txt", "text", "plain" },
|
||||||
|
{ ".uil", "text", "x-uil" },
|
||||||
|
{ ".uni", "text", "uri-list" },
|
||||||
|
{ ".unis", "text", "uri-list" },
|
||||||
|
{ ".unv", "application", "i-deas" },
|
||||||
|
{ ".uri", "text", "uri-list" },
|
||||||
|
{ ".uris", "text", "uri-list" },
|
||||||
|
{ ".ustar", "application", "x-ustar" },
|
||||||
|
{ ".ustar", "multipart", "x-ustar" },
|
||||||
|
{ ".uu", "application", "octet-stream" },
|
||||||
|
{ ".uu", "text", "x-uuencode" },
|
||||||
|
{ ".uue", "text", "x-uuencode" },
|
||||||
|
{ ".vcd", "application", "x-cdlink" },
|
||||||
|
{ ".vcs", "text", "x-vcalendar" },
|
||||||
|
{ ".vda", "application", "vda" },
|
||||||
|
{ ".vdo", "video", "vdo" },
|
||||||
|
{ ".vew", "application", "groupwise" },
|
||||||
|
{ ".viv", "video", "vivo" },
|
||||||
|
{ ".viv", "video", "vnd.vivo" },
|
||||||
|
{ ".vivo", "video", "vivo" },
|
||||||
|
{ ".vivo", "video", "vnd.vivo" },
|
||||||
|
{ ".vmd", "application", "vocaltec-media-desc" },
|
||||||
|
{ ".vmf", "application", "vocaltec-media-file" },
|
||||||
|
{ ".voc", "audio", "voc" },
|
||||||
|
{ ".voc", "audio", "x-voc" },
|
||||||
|
{ ".vos", "video", "vosaic" },
|
||||||
|
{ ".vox", "audio", "voxware" },
|
||||||
|
{ ".vqe", "audio", "x-twinvq-plugin" },
|
||||||
|
{ ".vqf", "audio", "x-twinvq" },
|
||||||
|
{ ".vql", "audio", "x-twinvq-plugin" },
|
||||||
|
{ ".vrml", "application", "x-vrml" },
|
||||||
|
{ ".vrml", "model", "vrml" },
|
||||||
|
{ ".vrml", "x-world", "x-vrml" },
|
||||||
|
{ ".vrt", "x-world", "x-vrt" },
|
||||||
|
{ ".vsd", "application", "x-visio" },
|
||||||
|
{ ".vst", "application", "x-visio" },
|
||||||
|
{ ".vsw", "application", "x-visio" },
|
||||||
|
{ ".w60", "application", "wordperfect6.0" },
|
||||||
|
{ ".w61", "application", "wordperfect6.1" },
|
||||||
|
{ ".w6w", "application", "msword" },
|
||||||
|
{ ".wav", "audio", "wav" },
|
||||||
|
{ ".wav", "audio", "x-wav" },
|
||||||
|
{ ".wb1", "application", "x-qpro" },
|
||||||
|
{ ".wbmp", "image", "vnd.wap.wbmp" },
|
||||||
|
{ ".web", "application", "vnd.xara" },
|
||||||
|
{ ".wiz", "application", "msword" },
|
||||||
|
{ ".wk1", "application", "x-123" },
|
||||||
|
{ ".wmf", "windows", "metafile" },
|
||||||
|
{ ".wml", "text", "vnd.wap.wml" },
|
||||||
|
{ ".wmlc", "application", "vnd.wap.wmlc" },
|
||||||
|
{ ".wmls", "text", "vnd.wap.wmlscript" },
|
||||||
|
{ ".wmlsc", "application", "vnd.wap.wmlscriptc" },
|
||||||
|
{ ".word", "application", "msword" },
|
||||||
|
{ ".wp", "application", "wordperfect" },
|
||||||
|
{ ".wp5", "application", "wordperfect" },
|
||||||
|
{ ".wp5", "application", "wordperfect6.0" },
|
||||||
|
{ ".wp6", "application", "wordperfect" },
|
||||||
|
{ ".wpd", "application", "wordperfect" },
|
||||||
|
{ ".wpd", "application", "x-wpwin" },
|
||||||
|
{ ".wq1", "application", "x-lotus" },
|
||||||
|
{ ".wri", "application", "mswrite" },
|
||||||
|
{ ".wri", "application", "x-wri" },
|
||||||
|
{ ".wrl", "application", "x-world" },
|
||||||
|
{ ".wrl", "model", "vrml" },
|
||||||
|
{ ".wrl", "x-world", "x-vrml" },
|
||||||
|
{ ".wrz", "model", "vrml" },
|
||||||
|
{ ".wrz", "x-world", "x-vrml" },
|
||||||
|
{ ".wsc", "text", "scriplet" },
|
||||||
|
{ ".wsrc", "application", "x-wais-source" },
|
||||||
|
{ ".wtk", "application", "x-wintalk" },
|
||||||
|
{ ".xbm", "image", "x-xbitmap" },
|
||||||
|
{ ".xbm", "image", "x-xbm" },
|
||||||
|
{ ".xbm", "image", "xbm" },
|
||||||
|
{ ".xdr", "video", "x-amt-demorun" },
|
||||||
|
{ ".xgz", "xgl", "drawing" },
|
||||||
|
{ ".xif", "image", "vnd.xiff" },
|
||||||
|
{ ".xl", "application", "excel" },
|
||||||
|
{ ".xla", "application", "excel" },
|
||||||
|
{ ".xla", "application", "x-excel" },
|
||||||
|
{ ".xla", "application", "x-msexcel" },
|
||||||
|
{ ".xlb", "application", "excel" },
|
||||||
|
{ ".xlb", "application", "vnd.ms-excel" },
|
||||||
|
{ ".xlb", "application", "x-excel" },
|
||||||
|
{ ".xlc", "application", "excel" },
|
||||||
|
{ ".xlc", "application", "vnd.ms-excel" },
|
||||||
|
{ ".xlc", "application", "x-excel" },
|
||||||
|
{ ".xld", "application", "excel" },
|
||||||
|
{ ".xld", "application", "x-excel" },
|
||||||
|
{ ".xlk", "application", "excel" },
|
||||||
|
{ ".xlk", "application", "x-excel" },
|
||||||
|
{ ".xll", "application", "excel" },
|
||||||
|
{ ".xll", "application", "vnd.ms-excel" },
|
||||||
|
{ ".xll", "application", "x-excel" },
|
||||||
|
{ ".xlm", "application", "excel" },
|
||||||
|
{ ".xlm", "application", "vnd.ms-excel" },
|
||||||
|
{ ".xlm", "application", "x-excel" },
|
||||||
|
{ ".xls", "application", "excel" },
|
||||||
|
{ ".xls", "application", "vnd.ms-excel" },
|
||||||
|
{ ".xls", "application", "x-excel" },
|
||||||
|
{ ".xls", "application", "x-msexcel" },
|
||||||
|
{ ".xlt", "application", "excel" },
|
||||||
|
{ ".xlt", "application", "x-excel" },
|
||||||
|
{ ".xlv", "application", "excel" },
|
||||||
|
{ ".xlv", "application", "x-excel" },
|
||||||
|
{ ".xlw", "application", "excel" },
|
||||||
|
{ ".xlw", "application", "vnd.ms-excel" },
|
||||||
|
{ ".xlw", "application", "x-excel" },
|
||||||
|
{ ".xlw", "application", "x-msexcel" },
|
||||||
|
{ ".xm", "audio", "xm" },
|
||||||
|
{ ".xml", "application", "xml" },
|
||||||
|
{ ".xml", "text", "xml" },
|
||||||
|
{ ".xmz", "xgl", "movie" },
|
||||||
|
{ ".xpix", "application", "x-vnd.ls-xpix" },
|
||||||
|
{ ".xpm", "image", "x-xpixmap" },
|
||||||
|
{ ".xpm", "image", "xpm" },
|
||||||
|
{ ".x-png", "image", "png" },
|
||||||
|
{ ".xsr", "video", "x-amt-showrun" },
|
||||||
|
{ ".xwd", "image", "x-xwd" },
|
||||||
|
{ ".xwd", "image", "x-xwindowdump" },
|
||||||
|
{ ".xyz", "chemical", "x-pdb" },
|
||||||
|
{ ".z", "application", "x-compress" },
|
||||||
|
{ ".z", "application", "x-compressed" },
|
||||||
|
{ ".zip", "application", "x-compressed" },
|
||||||
|
{ ".zip", "application", "x-zip-compressed" },
|
||||||
|
{ ".zip", "application", "zip" },
|
||||||
|
{ ".zip", "multipart", "x-zip" },
|
||||||
|
{ ".zoo", "application", "octet-stream" },
|
||||||
|
{ ".zsh", "text", "x-script.zsh" }
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def inline(path, filename \\ nil) do
|
||||||
|
case path |> Path.expand |> File.read do
|
||||||
|
{ :ok, data } ->
|
||||||
|
{
|
||||||
|
:ok,
|
||||||
|
%Mailex.Attachment{
|
||||||
|
filename: filename || Path.basename(path),
|
||||||
|
type: guess_mime_type(path),
|
||||||
|
data: data
|
||||||
|
}
|
||||||
|
}
|
||||||
|
{ :error, message } -> { :error, message }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def inline!(path, filename \\ nil) do
|
||||||
|
case inline(path, filename) do
|
||||||
|
{ :ok, attachment } -> attachment
|
||||||
|
{ :error, message } -> throw message
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def mime_types, do: @mime_types
|
||||||
|
|
||||||
|
|
||||||
|
def guess_mime_type(path) do
|
||||||
|
extension = Path.extname(path)
|
||||||
|
type = Enum.find mime_types, fn({ext, _, _}) -> ext == extension end
|
||||||
|
if (type) do
|
||||||
|
{ elem(type, 1), elem(type, 2) }
|
||||||
|
else
|
||||||
|
{ "application", "octet-stream" }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
end
|
5
lib/mailex/email.ex
Normal file
5
lib/mailex/email.ex
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
defmodule Mailex.Email do
|
||||||
|
|
||||||
|
defstruct subject: nil, from: nil, reply_to: nil, to: nil, cc: nil, bcc: nil, attachments: nil, html: nil, text: nil
|
||||||
|
|
||||||
|
end
|
137
lib/mailex/render.ex
Normal file
137
lib/mailex/render.ex
Normal file
@ -0,0 +1,137 @@
|
|||||||
|
defmodule Mailex.Render do
|
||||||
|
|
||||||
|
alias Mailex.Address
|
||||||
|
|
||||||
|
def render(email) do
|
||||||
|
mimemail_args = []
|
||||||
|
if email.text, do:
|
||||||
|
mimemail_args = [ { :plain, email.text } | mimemail_args]
|
||||||
|
if email.html, do:
|
||||||
|
mimemail_args = [ { :html, email.html } | mimemail_args]
|
||||||
|
if email.attachments, do:
|
||||||
|
mimemail_args = [ Enum.map(email.attachments, fn(a) -> { :attachment, a.data, a } end) | mimemail_args ]
|
||||||
|
|
||||||
|
mimemail_args |> List.flatten |> to_tuple(email) |> :mimemail.encode
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def to_tuple(part, _email) when is_tuple(part) do
|
||||||
|
{
|
||||||
|
mime_type_for(part),
|
||||||
|
mime_subtype_for(part),
|
||||||
|
[],
|
||||||
|
parameters_for(part),
|
||||||
|
elem(part, 1)
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def to_tuple(parts, email) when is_list(parts) do
|
||||||
|
{
|
||||||
|
mime_type_for(parts),
|
||||||
|
mime_subtype_for(parts),
|
||||||
|
headers_for(email),
|
||||||
|
[],
|
||||||
|
Enum.map(parts, &to_tuple(&1, email))
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def parameters_for({:attachment, _body, attachment}) do
|
||||||
|
[
|
||||||
|
{ "transfer-encoding", "base64" },
|
||||||
|
content_type_params_for(attachment),
|
||||||
|
disposition_for(attachment),
|
||||||
|
disposition_params_for(attachment)
|
||||||
|
]
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def parameters_for(_part) do
|
||||||
|
[
|
||||||
|
{ "transfer-encoding", "quoted-printable" },
|
||||||
|
{ "content-type-params", [] },
|
||||||
|
{ "disposition", "inline" },
|
||||||
|
{ "disposition-params", [] }
|
||||||
|
]
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def content_type_params_for(attachment) do
|
||||||
|
{ "content-type-params", [{ "name", attachment.filename }] }
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def disposition_for(_attachment) do
|
||||||
|
{ "disposition", "attachment" }
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def disposition_params_for(attachment) do
|
||||||
|
{ "disposition-params", [{ "filename", attachment.filename }] }
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def mime_type_for(parts) when is_list(parts) do
|
||||||
|
"multipart"
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def mime_type_for({_type, _}) do
|
||||||
|
"text"
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def mime_type_for({_, _, attachment}) do
|
||||||
|
elem(attachment.type, 0)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def mime_subtype_for(parts) when is_list(parts) do
|
||||||
|
if Enum.find parts, fn(part) -> elem(part, 0) == :attachment end do
|
||||||
|
"mixed"
|
||||||
|
else
|
||||||
|
"alternative"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def mime_subtype_for({type, _}) do
|
||||||
|
type
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def mime_subtype_for({_, _, attachment}) do
|
||||||
|
elem(attachment.type, 1)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def headers_for(email) do
|
||||||
|
headers = []
|
||||||
|
|
||||||
|
if email.reply_to, do:
|
||||||
|
headers = [ { "Reply-To", email.reply_to |> stringify_addresses } ]
|
||||||
|
|
||||||
|
if email.bcc, do:
|
||||||
|
headers = [ { "Bcc", email.bcc |> stringify_addresses } | headers ]
|
||||||
|
|
||||||
|
if email.cc, do:
|
||||||
|
headers = [ { "Cc", email.cc |> stringify_addresses } | headers ]
|
||||||
|
|
||||||
|
[ { "From", email.from |> stringify_addresses },
|
||||||
|
{ "To", email.to |> stringify_addresses },
|
||||||
|
{ "Subject", email.subject || "" } | headers ]
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def stringify_addresses(addresses) do
|
||||||
|
addresses = addresses |> Address.rfc_822_format
|
||||||
|
if is_list(addresses) do
|
||||||
|
Enum.join(addresses, ", ")
|
||||||
|
else
|
||||||
|
addresses
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
end
|
23
mix.exs
Normal file
23
mix.exs
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
defmodule Mailex.Mixfile do
|
||||||
|
use Mix.Project
|
||||||
|
|
||||||
|
def project do
|
||||||
|
[app: :mailex,
|
||||||
|
version: "0.0.1",
|
||||||
|
elixir: "~> 1.1",
|
||||||
|
build_embedded: Mix.env == :prod,
|
||||||
|
start_permanent: Mix.env == :prod,
|
||||||
|
deps: deps]
|
||||||
|
end
|
||||||
|
|
||||||
|
def application do
|
||||||
|
[ applications: [:ssl, :crypto, :eiconv, :gen_smtp]]
|
||||||
|
end
|
||||||
|
|
||||||
|
defp deps do
|
||||||
|
[
|
||||||
|
{ :eiconv, github: "zotonic/eiconv" },
|
||||||
|
{ :gen_smtp, ">= 0.9.0" }
|
||||||
|
]
|
||||||
|
end
|
||||||
|
end
|
2
mix.lock
Normal file
2
mix.lock
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
%{"eiconv": {:git, "https://github.com/zotonic/eiconv.git", "644fb5e7bd6640fbd073f4d28957914ea979aea0", []},
|
||||||
|
"gen_smtp": {:hex, :gen_smtp, "0.9.0"}}
|
BIN
test/.DS_Store
vendored
Normal file
BIN
test/.DS_Store
vendored
Normal file
Binary file not shown.
BIN
test/data/logo.gif
Normal file
BIN
test/data/logo.gif
Normal file
Binary file not shown.
After Width: | Height: | Size: 18 KiB |
8
test/mailex_test.exs
Normal file
8
test/mailex_test.exs
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
defmodule MailexTest do
|
||||||
|
use ExUnit.Case
|
||||||
|
doctest Mailex
|
||||||
|
|
||||||
|
test "the truth" do
|
||||||
|
assert 1 + 1 == 2
|
||||||
|
end
|
||||||
|
end
|
1
test/test_helper.exs
Normal file
1
test/test_helper.exs
Normal file
@ -0,0 +1 @@
|
|||||||
|
ExUnit.start()
|
Loading…
Reference in New Issue
Block a user