@@ -9,7 +9,10 @@ defmodule Mail.Message do
9
9
@ doc """
10
10
Add new part
11
11
12
- Mail.Message.put_part(%Mail.Message{}, %Mail.Message{})
12
+ ## Examples
13
+
14
+ iex> Mail.Message.put_part(%Mail.Message{}, %Mail.Message{})
15
+ %Mail.Message{parts: [%Mail.Message{}]}
13
16
"""
14
17
def put_part ( message , % Mail.Message { } = part ) do
15
18
put_in ( message . parts , message . parts ++ [ part ] )
@@ -27,10 +30,14 @@ defmodule Mail.Message do
27
30
@ doc """
28
31
Will match on a full or partial content type
29
32
30
- Mail.Message.match_content_type?(message, ~r/text/)
33
+ ## Examples
34
+
35
+ iex> message = %Mail.Message{headers: %{"content-type" => ["text/plain", {"charset", "UTF-8"}]}}
36
+ iex> Mail.Message.match_content_type?(message, ~r/text/)
31
37
true
32
38
33
- Mail.Message.match_content_type?(message, "text/html")
39
+ iex> message = %Mail.Message{headers: %{"content-type" => ["text/plain", {"charset", "UTF-8"}]}}
40
+ iex> Mail.Message.match_content_type?(message, "text/html")
34
41
false
35
42
"""
36
43
def match_content_type? ( message , string_or_regex )
@@ -52,7 +59,10 @@ defmodule Mail.Message do
52
59
@ doc """
53
60
Add a new header key/value pair
54
61
55
- Mail.Message.put_header(%Mail.Message{}, :content_type, "text/plain")
62
+ ## Examples
63
+
64
+ iex> Mail.Message.put_header(%Mail.Message{}, :content_type, "text/plain")
65
+ %Mail.Message{headers: %{"content-type" => "text/plain"}}
56
66
57
67
The individual headers will be in the `headers` field on the
58
68
`%Mail.Message{}` struct
@@ -72,7 +82,9 @@ defmodule Mail.Message do
72
82
@ doc """
73
83
Deletes a specific header key
74
84
75
- Mail.Message.delete_header(%Mail.Message{headers: %{foo: "bar"}}, :foo)
85
+ ## Examples
86
+
87
+ iex> Mail.Message.delete_header(%Mail.Message{headers: %{"foo" => "bar"}}, :foo)
76
88
%Mail.Message{headers: %{}}
77
89
"""
78
90
def delete_header ( message , header ) ,
@@ -81,7 +93,9 @@ defmodule Mail.Message do
81
93
@ doc """
82
94
Deletes a list of headers
83
95
84
- Mail.Message.delete_headers(%Mail.Message{headers: %{foo: "bar", baz: "qux"}}, [:foo, :baz])
96
+ ## Examples
97
+
98
+ iex> Mail.Message.delete_headers(%Mail.Message{headers: %{"foo" => "bar", "baz" => "qux"}}, [:foo, :baz])
85
99
%Mail.Message{headers: %{}}
86
100
"""
87
101
def delete_headers ( message , headers )
@@ -104,24 +118,35 @@ defmodule Mail.Message do
104
118
105
119
The value will always be wrapped in a `List`
106
120
107
- Mail.Message.put_content_type(%Mail.Message{}, "text/plain")
108
- %Mail.Message{headers: %{content_type: ["text/plain"]}}
121
+ ## Examples
122
+
123
+ iex> Mail.Message.put_content_type(%Mail.Message{}, "text/plain")
124
+ %Mail.Message{headers: %{"content-type" => ["text/plain"]}}
125
+
126
+ iex> Mail.Message.put_content_type(%Mail.Message{}, ["text/plain", {"charset", "UTF-8"}])
127
+ %Mail.Message{headers: %{"content-type" => ["text/plain", {"charset", "UTF-8"}]}}
109
128
"""
110
- def put_content_type ( message , content_type ) ,
111
- do: put_header ( message , :content_type , content_type )
129
+ def put_content_type ( message , content_type ) when is_binary ( content_type ) ,
130
+ do: put_content_type ( message , [ content_type ] )
131
+
132
+ def put_content_type ( message , content_type ) do
133
+ put_header ( message , :content_type , content_type )
134
+ end
112
135
113
136
@ doc """
114
137
Gets the `content_type` from the header
115
138
116
139
Will ensure the `content_type` is always wrapped in a `List`
117
140
118
- Mail.Message.get_content_type(%Mail.Message{})
141
+ ## Examples
142
+
143
+ iex> Mail.Message.get_content_type(%Mail.Message{})
119
144
[""]
120
145
121
- Mail.Message.get_content_type(%Mail.Message{content_type: " text/plain"})
146
+ iex> Mail.Message.get_content_type(%Mail.Message{headers: %{"content-type" => " text/plain"} })
122
147
["text/plain"]
123
148
124
- Mail.Message.get_content_type(%Mail.Message{headers: %{content_type: ["multipart/mixed", {"boundary", "foobar"}]}})
149
+ iex> Mail.Message.get_content_type(%Mail.Message{headers: %{"content-type" => ["multipart/mixed", {"boundary", "foobar"}]}})
125
150
["multipart/mixed", {"boundary", "foobar"}]
126
151
"""
127
152
def get_content_type ( message ) ,
@@ -135,11 +160,13 @@ defmodule Mail.Message do
135
160
Will overwrite existing `boundary` key in the list. Will preserve other
136
161
values in the list
137
162
138
- Mail.Message.put_boundary(%Mail.Message{}, "foobar")
139
- %Mail.Message{headers: %{content_type: ["", {"boundary", "foobar"}]}}
163
+ ## Examples
164
+
165
+ iex> Mail.Message.put_boundary(%Mail.Message{}, "foobar")
166
+ %Mail.Message{headers: %{"content-type" => ["", {"boundary", "foobar"}]}}
140
167
141
- Mail.Message.put_boundary(%Mail.Message{headers: %{content_type: ["multipart/mixed", {"boundary", "bazqux"}]}})
142
- %Mail.Message{headers: %{content_type: ["multipart/mixed", {"boundary", "foobar"}]}}
168
+ iex> Mail.Message.put_boundary(%Mail.Message{headers: %{"content-type" => ["multipart/mixed", {"boundary", "bazqux"}]}}, "foobar" )
169
+ %Mail.Message{headers: %{"content-type" => ["multipart/mixed", {"boundary", "foobar"}]}}
143
170
"""
144
171
def put_boundary ( message , boundary ) do
145
172
content_type =
@@ -154,10 +181,12 @@ defmodule Mail.Message do
154
181
155
182
Will retrieve the boundary value. If one is not set a random one is generated.
156
183
157
- Mail.Message.get_boundary(%Mail.Message{headers: %{content_type: ["multipart/mixed", {"boundary", "foobar"}]}})
184
+ ## Examples
185
+
186
+ iex> Mail.Message.get_boundary(%Mail.Message{headers: %{"content-type" => ["multipart/mixed", {"boundary", "foobar"}]}})
158
187
"foobar"
159
188
160
- Mail.Message.get_boundary(%Mail.Message{headers: %{content_type: ["multipart/mixed"]}})
189
+ iex> Mail.Message.get_boundary(%Mail.Message{headers: %{"content-type" => ["multipart/mixed", {"boundary", "ASDFSHNEW3473423"} ]}})
161
190
"ASDFSHNEW3473423"
162
191
"""
163
192
def get_boundary ( message ) do
@@ -177,7 +206,9 @@ defmodule Mail.Message do
177
206
@ doc """
178
207
Sets the `body` field on the part
179
208
180
- Mail.Message.put_body(%Mail.Message{}, "Some data")
209
+ ## Examples
210
+
211
+ iex> Mail.Message.put_body(%Mail.Message{}, "Some Data")
181
212
%Mail.Message{body: "Some Data", headers: %{}}
182
213
"""
183
214
def put_body ( part , body ) ,
@@ -186,11 +217,13 @@ defmodule Mail.Message do
186
217
@ doc """
187
218
Build a new text message
188
219
189
- Mail.Message.build_text("Some text")
190
- %Mail.Message{body: "Some text", headers: %{content_type: "text/plain"}}
220
+ ## Examples
191
221
192
- Mail.Message.build_text("Some text", charset: "UTF-8")
193
- %Mail.Message{body: "Some text", headers: %{content_type: ["text/plain", {"charset", "UTF-8"}]}}
222
+ iex> Mail.Message.build_text("Some text")
223
+ %Mail.Message{body: "Some text", headers: %{"content-type" => ["text/plain", {"charset", "UTF-8"}], "content-transfer-encoding" => :quoted_printable}}
224
+
225
+ iex> Mail.Message.build_text("Some text", charset: "us-ascii")
226
+ %Mail.Message{body: "Some text", headers: %{"content-type" => ["text/plain", {"charset", "us-ascii"}], "content-transfer-encoding" => :quoted_printable}}
194
227
195
228
## Options
196
229
@@ -214,11 +247,13 @@ defmodule Mail.Message do
214
247
@ doc """
215
248
Build a new HTML message
216
249
217
- Mail.Message.build_html("<h1>Some HTML</h1>")
218
- %Mail.Message{body: "<h1>Some HTML</h1>", headers: %{content_type: "text/html"}}
250
+ ## Examples
251
+
252
+ iex> Mail.Message.build_html("<h1>Some HTML</h1>")
253
+ %Mail.Message{body: "<h1>Some HTML</h1>", headers: %{"content-type" => ["text/html", {"charset", "UTF-8"}], "content-transfer-encoding" => :quoted_printable}}
219
254
220
- Mail.Message.build_html("<h1>Some HTML</h1>", charset: "UTF-8")
221
- %Mail.Message{body: "<h1>Some HTML</h1>", headers: %{content_type: ["text/html", {"charset", "UTF-8"}]}}
255
+ iex> Mail.Message.build_html("<h1>Some HTML</h1>", charset: "UTF-8")
256
+ %Mail.Message{body: "<h1>Some HTML</h1>", headers: %{"content-type" => ["text/html", {"charset", "UTF-8"}], "content-transfer-encoding" => :quoted_printable }}
222
257
223
258
## Options
224
259
@@ -255,11 +290,13 @@ defmodule Mail.Message do
255
290
256
291
The mimetype of the file is determined by the file extension.
257
292
258
- Mail.Message.build_attachment("README.md")
259
- %Mail.Message{data: "base64 encoded", headers: %{content_type: ["text/x-markdown"], content_disposition: ["attachment", filename: "README.md"], content_transfer_encoding: :base64}}
293
+ ## Examples
260
294
261
- Mail.Message.build_attachment({"README.md", "file contents"})
262
- %Mail.Message{data: "base64 encoded", headers: %{content_type: ["text/x-markdown"], content_disposition: ["attachment", filename: "README.md"], content_transfer_encoding: :base64}}
295
+ iex> message = Mail.Message.build_attachment("README.md")
296
+ %Mail.Message{body: <<"# Mail\\ n", _::binary>>, headers: %{"content-type" => ["text/markdown"], "content-disposition" => ["attachment", {"filename", "README.md"}], "content-transfer-encoding" => :base64}} = message
297
+
298
+ iex> message = Mail.Message.build_attachment({"README.md", "file contents"})
299
+ %Mail.Message{body: "file contents", headers: %{"content-type" => ["text/markdown"], "content-disposition" => ["attachment", {"filename", "README.md"}], "content-transfer-encoding" => :base64}} = message
263
300
264
301
## Options
265
302
@@ -297,18 +334,20 @@ defmodule Mail.Message do
297
334
* `:headers` - Headers to be merged
298
335
299
336
## Examples
300
- Mail.Message.put_attachment(%Mail.Message{}, "README.md")
301
- %Mail.Message{data: "base64 encoded", headers: %{content_type: ["text/x-markdown"], content_disposition: ["attachment", filename: "README.md"], content_transfer_encoding: :base64}}
302
337
303
- Mail.Message.put_attachment(%Mail.Message{}, {"README.md", "file contents"})
304
- %Mail.Message{data: "base64 encoded", headers: %{content_type: ["text/x-markdown"], content_disposition: ["attachment", filename: "README.md"], content_transfer_encoding: :base64}}
338
+ iex> message = Mail.Message.put_attachment(%Mail.Message{}, "README.md")
339
+ %Mail.Message{body: <<"# Mail\\ n", _::binary>>, headers: %{"content-type" => ["text/markdown"], "content-disposition" => ["attachment", {"filename", "README.md"}], "content-transfer-encoding" => :base64}} = message
340
+
341
+ iex> Mail.Message.put_attachment(%Mail.Message{}, {"README.md", "file contents"})
342
+ %Mail.Message{body: "file contents", headers: %{"content-type" => ["text/markdown"], "content-disposition" => ["attachment", {"filename", "README.md"}], "content-transfer-encoding" => :base64}}
305
343
306
344
### Adding custom headers
307
- Mail.Message.put_attachment(%Mail.Message{}, "README.md", headers: [content_id: "attachment-id"])
308
- %Mail.Message{data: "base64 encoded", headers: %{content_type: ["text/x-markdown"], content_disposition: ["attachment", filename: "README.md"], content_transfer_encoding: :base64, content_id: "attachment-id"}}
309
345
310
- Mail.Message.put_attachment(%Mail.Message{}, {"README.md", data}, headers: [content_id: "attachment-id"])
311
- %Mail.Message{data: "base64 encoded", headers: %{content_type: ["text/x-markdown"], content_disposition: ["attachment", filename: "README.md"], content_transfer_encoding: :base64, content_id: "attachment-id"}}
346
+ iex> message =Mail.Message.put_attachment(%Mail.Message{}, "README.md", headers: [content_id: "attachment-id"])
347
+ %Mail.Message{body: <<"# Mail\\ n", _::binary>>, headers: %{"content-type" => ["text/markdown"], "content-disposition" => ["attachment", {"filename", "README.md"}], "content-transfer-encoding" => :base64, "content-id" => "attachment-id"}} = message
348
+
349
+ iex> message = Mail.Message.put_attachment(%Mail.Message{}, {"README.md", "file contents"}, headers: [content_id: "attachment-id"])
350
+ %Mail.Message{body: "file contents", headers: %{"content-type" => ["text/markdown"], "content-disposition" => ["attachment", {"filename", "README.md"}], "content-transfer-encoding" => :base64, "content-id" => "attachment-id"}} = message
312
351
"""
313
352
def put_attachment ( message , path_or_file_tuple , opts \\ [ ] )
314
353
0 commit comments