Adds email talk

This commit is contained in:
Nemo 2020-08-15 15:14:53 +05:30
parent 324ef76ba9
commit c87804e725
11 changed files with 756 additions and 0 deletions

View File

@ -20,6 +20,7 @@ Various talks & Lectures that I have given
18. [Video streaming on Linux](/talks/v4l.html).
19. [HPACK - Header Compression in HTTP/2](/talks/hpack/).
20. [Sanderson's Laws of Magic](https://docs.google.com/presentation/d/1SNEEh2_i93V64Fnzg8_05vOGjJMSuagX8IyrLt-5xXk/present)
21. [multipart-emails](/talks/email-protocols/) - A short talk on how linking with mid/cid schemes works in multipart-emails. Related work: https://github.com/awdeorio/mailmerge/issues/86
A few more talks that I've done are on my [SpeakerDeck account](https://speakerdeck.com/captn3m0) and my [slides.com](https://slides.com/captn3m0/) profile page.

13
email-protocols/cat.html Normal file
View File

@ -0,0 +1,13 @@
<!DOCTYPE html>
<html>
<head>
<title>Cats!</title>
</head>
<body>
<img src="https://i.imgur.com/u4qSjQL.jpeg">
<br>
<img src="u4qSjQL.jpeg">
<br>
<img src='data:image/jpeg;base64,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'/>
</body>
</html>

View File

@ -0,0 +1,10 @@
From: foo1@bar.net
To: foo2@bar.net
Subject: A simple example
Content-Type: text/html; charset=utf-8
Hi,
This is a cat pic:
<img src="data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDABIMDhAOCxIQDxAUExIVGy0dGxkZGzcoKiEtQjpFREA6Pz5IUWhYSE1iTj4/WntcYmtvdHZ0RleAiX9xiGhydHD/2wBDARMUFBsYGzUdHTVwSz9LcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHBwcHD/wAARCACBAMgDASIAAhEBAxEB/8QAHwAAAQUBAQEBAQEAAAAAAAAAAAECAwQFBgcICQoL/8QAtRAAAgEDAwIEAwUFBAQAAAF9AQIDAAQRBRIhMUEGE1FhByJxFDKBkaEII0KxwRVS0fAkM2JyggkKFhcYGRolJicoKSo0NTY3ODk6Q0RFRkdISUpTVFVWV1hZWmNkZWZnaGlqc3R1dnd4eXqDhIWGh4iJipKTlJWWl5iZmqKjpKWmp6ipqrKztLW2t7i5usLDxMXGx8jJytLT1NXW19jZ2uHi4+Tl5ufo6erx8vP09fb3+Pn6/8QAHwEAAwEBAQEBAQEBAQAAAAAAAAECAwQFBgcICQoL/8QAtRE...">

View File

@ -0,0 +1,24 @@
From: foo1@bar.net
To: foo2@bar.net
Subject: A simple example
Mime-Version: 1.0
Content-Type: multipart/related; boundary="never-graduate";
type=Text/HTML
--never-graduate
Content-Type: Text/HTML; charset=US-ASCII
to the other body part, for example through a statement such as:
<img src="cid:foo4*foo1@bar.net">
--never-graduate
Content-ID: <foo4*foo1@bar.net>
Content-Type: IMAGE/GIF
Content-Transfer-Encoding: BASE64
R0lGODlhGAGgAPEAAP/////ZRaCgoAAAACH+PUNvcHlyaWdodCAoQykgMTk5
NSBJRVRGLiBVbmF1dGhvcml6ZWQgZHVwbGljYXRpb24gcHJvaGliaXRlZC4A
etc...
--never-graduate--
# remember to pitch for RFCs We Love

10
email-protocols/email.txt Normal file
View File

@ -0,0 +1,10 @@
From: foo1@bar.net
To: foo2@bar.net
Subject: A simple example
Content-Type: text/html; charset=utf-8
Hi,
This is a cat pic:
<img src="https://i.imgur.com/u4qSjQL.jpeg">

View File

@ -0,0 +1,32 @@
POST / HTTP/1.1
[[ Less interesting headers ... ]]
Content-Type: multipart/form-data; boundary=---------------------------boundary
Content-Length: 834
-----------------------------boundary
Content-Disposition: form-data; name="text1"
text default
-----------------------------boundary
Content-Disposition: form-data; name="text2"
aωb
-----------------------------boundary
Content-Disposition: form-data; name="file1"; filename="a.txt"
Content-Type: text/plain
Content-ID: <a@example.com>
Content of a.txt.
-----------------------------boundary
Content-Disposition: form-data; name="file2"; filename="a.html"
Content-Type: text/html
<!DOCTYPE html><title>Content of a.html.</title>
-----------------------------boundary
Content-Disposition: form-data; name="file3"; filename="binary"
Content-Type: application/octet-stream
aωb
-----------------------------boundary--

View File

@ -0,0 +1,6 @@
<div>
<form>
<input type="file" name="">
<input type="file" name="">
</form>
</div>

437
email-protocols/index.html Normal file

File diff suppressed because one or more lines are too long

202
email-protocols/index.md Normal file
View File

@ -0,0 +1,202 @@
# multipart-encoding in emails
\-nemo
---
# history of email RFCs
Date|RFC|Title
----|-----|-----
Jun '73|524|A Proposed Mail Protocol
Sep '73|561|Standardizing Network Mail Headers
Apr '75|680|Message Transmission Protocol
May '77|724|Proposed Official Standard for the Format of ARPA Network Messages
Nov '77|733|STANDARD FOR THE FORMAT OF ARPA NETWORK TEXT MESSAGES(1)
Aug '82|821|SIMPLE MAIL TRANSFER PROTOCOL
Aug '82|822|STANDARD FOR THE FORMAT OF ARPA INTERNET TEXT MESSAGES
Jan '86|974|MAIL ROUTING AND THE DOMAIN SYSTEM
Apr '86|983|ISO Transport Services on Top of the TCP
May '87|1006|ISO Transport Service on top of the TCP
Oct '89|1123|Requirements for Internet Hosts -- Application and Support
Dec '89|1138|Mapping between X.400(1988) / ISO 10021 and RFC 822
Mar '90|1148|Mapping between X.400(1988) / ISO 10021 and RFC 822
May '92|1327|Mapping between X.400(1988) / ISO 10021 and RFC 822
Aug '93|1495|Mapping between X.400 and RFC-822 Message Bodies
Nov '95|1869|SMTP Service Extensions
Mar '97|2111|Content-ID and Message-ID Uniform Resource Locators
Jan '98|2156|MIXER (Mime Internet X.400 Enhanced Relay): Mapping between X.400 and RFC 822/MIME
Aug '98|2387|The MIME Multipart/Related Content-type
Aug '98|2392|Content-ID and Message-ID Uniform Resource Locators
Apr '01|2821|Simple Mail Transfer Protocol
Apr '01|2822|Internet Message Format
Oct '08|5321|Simple Mail Transfer Protocol
Oct '08|5322|Internet Message Format
---
# email protocols
1. how to talk to an email server (SMTP)
- TCP
- DNS
2. how to format a message?
- Media types (MIME)
- how to format dates?
- html
3. how to receive email?
- IMAP
- POP
---
# mainline
Date|RFC|Title
----|-----|-----
Aug '82|821|SIMPLE MAIL TRANSFER PROTOCOL
Aug '82|822|STANDARD FOR THE FORMAT OF ARPA INTERNET TEXT MESSAGES
Apr '01|2821|Simple Mail Transfer Protocol
Apr '01|2822|Internet Message Format
Oct '08|5321|Simple Mail Transfer Protocol
Oct '08|5322|Internet Message Format
---
# how to send emails
Date|RFC|Title
----|-----|-----
Aug '82|821|SIMPLE MAIL TRANSFER PROTOCOL
Apr '01|2821|Simple Mail Transfer Protocol
Oct '08|5321|Simple Mail Transfer Protocol
---
# how to write emails
Date|RFC|Title
----|-----|-----
Aug '82|822|STANDARD FOR THE FORMAT OF ARPA INTERNET TEXT MESSAGES
Apr '01|2822|Internet Message Format
Oct '08|5322|Internet Message Format
---
# the multipart-variation
Date|RFC|Title
----|-----|-----
Mar '97|2111|Content-ID and Message-ID Uniform Resource Locators
Aug '98|2392|Content-ID and Message-ID Uniform Resource Locators
---
# what's multi-part?
```
POST / HTTP/1.1
[[ Less interesting headers ... ]]
Content-Type: multipart/form-data; boundary=--boundary
Content-Length: 834
--boundary
Content-Disposition: form-data; name="text1"
text default
--boundary
Content-Disposition: form-data; name="text2"
```
---
```
From: foo1@bar.net
To: foo2@bar.net
Subject: A simple example
Mime-Version: 1.0
Content-Type: multipart/alternate; boundary="never-graduate";
--never-graduate
Content-Type: Text/HTML; charset=US-ASCII
Content-Id: <html.foo1@bar.net>
This is <strong>My HTML</strong> email.
--never-graduate
Content-Id: <plaintext.foo1@bar.net>
Content-Type: text/plain
This is my plaintext email.
--never-graduate--
```
---
# multi-part-linking
Date|RFC|Title
----|-----|-----
Mar '97|2111|Content-ID and Message-ID Uniform Resource Locators
Aug '98|2392|Content-ID and Message-ID Uniform Resource Locators
---
# multi-part-linking
Scheme|Name
---|---
`cid:`|Content ID URL Scheme
`mid:`|Message ID URL Scheme
---
# definitions
```
content-id = url-addr-spec
message-id = url-addr-spec
url-addr-spec = addr-spec ; URL encoding of RFC 822 addr-spec
cid-url = "cid" ":" content-id
mid-url = "mid" ":" message-id [ "/" content-id ]
```
---
# plain english
* Content and Message IDs are emails
* CID/MID URLs are `cid:$CID`, `mid:$MID`, and `mid:$MID/$CID`
---
# so how does it work?
```
From: foo1@bar.net
To: foo2@bar.net
Subject: A simple example
Mime-Version: 1.0
Content-Type: multipart/related; boundary="never-graduate";type=Text/HTML
--never-graduate
Content-Type: Text/HTML; charset=US-ASCII
to the other body part, for example through a statement such as:
<img src="cid:foo4*foo1@bar.net">
--never-graduate
Content-ID: <foo4*foo1@bar.net>
Content-Type: IMAGE/GIF
Content-Transfer-Encoding: BASE64
R0lGODlhGAGgAPEAAP/////ZRaCgoAAAACH+PUNvcHlyaWdodCAoQykgMTk5
NSBJRVRGLiBVbmF1dGhvcml6ZWQgZHVwbGljYXRpb24gcHJvaGliaXRlZC4A
etc...
--never-graduate--
# remember to pitch for RFCs We Love
```

21
email-protocols/test.php Normal file
View File

@ -0,0 +1,21 @@
<?php
// header("Mime-Version: 1.0");
header('Content-Type: multipart/x-mixed-replace; boundary="--never-graduate--"');
header('Date: Tue, 01 Dec 2009 23:27:30 GMT');
header('Vary: Accept-Encoding,User-Agent');
?>
multipart-not-supported
--never-graduate--
Content-Type: text/html; charset=utf-8
Content-Base: http://localhost:1111/
<html>
<head>
<link rel="stylesheet" href="http://localhost:2080/file.css">
</head>
<body>
Hello from a html
<script type="text/javascript" src="http://localhost:2080/file.js"></script>
</body>
</html>
--never-graduate--

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.4 KiB