Skip to content
/ izms Public

IZ*ONE Private Mail App Python Client & Backup script

Notifications You must be signed in to change notification settings

coloriz/izms

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

63 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

izms logo

IZ*ONE Mail Shelter

IZ*ONE Mail Shelter (IZMS)๋Š” ์•„์ด์ฆˆ์› ํ”„๋ผ์ด๋น— ๋ฉ”์ผ ์•ฑ์—์„œ ๋ฐ›์€ ๋ฉ”์ผ๋“ค์„ HTML ํ˜•์‹์œผ๋กœ ๋กœ์ปฌ์— ๋‹ค์šด๋กœ๋“œํ•˜๋Š” ํŒŒ์ด์ฌ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค.

๋ณ‘๋ ฌ ๋‹ค์šด๋กœ๋“œ๋ฅผ ์ง€์›ํ•˜์—ฌ 1์ดˆ๋‹น 50๊ฐœ ์ด์ƒ์˜ ๋ฉ”์ผ์„ ๋‹ค์šด๋กœ๋“œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ์‹คํ–‰ ํ›„์—๋Š” ๋กœ์ปฌ์— ์„ค์ •ํ•œ ๋ฐฑ์—… ๋””๋ ‰ํ† ๋ฆฌ์™€ ์„œ๋ฒ„ ๋ฉ”์ผํ•จ๊ณผ์˜ ์ฐจ์ด๋ฅผ ๋น„๊ตํ•˜์—ฌ ์ƒˆ๋กœ์šด ๋ฉ”์ผ๋งŒ ์ถ”๊ฐ€์ ์œผ๋กœ ๋‹ค์šด๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค. ๋ณธ ๋ฆฌํฌ๋Š” ์•„์ด์ฆˆ์› ํ”„๋ผ์ด๋น— ๋ฉ”์ผ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ IZONEMail ํด๋ž˜์Šค์™€ ๊ทธ๊ฒƒ์„ ์ด์šฉํ•œ ๋ฐฑ์—… ์Šคํฌ๋ฆฝํŠธ izms.py๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Changelog

2021.05.29

  • HKT48 Mail ๋Œ€์‘ ์—…๋ฐ์ดํŠธ

2021.04.07

  • ๋ณ‘๋ ฌ ๋‹ค์šด๋กœ๋“œ ์ง€์› (max_workers ์˜ต์…˜)

2021.04.05

  • ๋ชจ๋“  ํŒŒ์ผ์˜ root path์ธ destination ์˜ต์…˜ ์ถ”๊ฐ€
  • ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ๋ณ„๋„ ์ €์žฅ (profile_image_path ์˜ต์…˜)
  • embed_css, image_to_base64 ์˜ต์…˜ ์ œ๊ฑฐ (HTML์— ์ž„๋ฒ ๋”ฉ ๋ฐฉ๋ฒ•์€ Appendix ์ฐธ์กฐ)
  • ์„ค์ •์—์„œ path๋Š” ๋ชจ๋‘ ์ ˆ๋Œ€๊ฒฝ๋กœ๋กœ ๋ณ€๊ฒฝ
  • subject์—์„œ ํŒŒ์ผ๋ช…์— ๋“ค์–ด๊ฐˆ ์ˆ˜ ์—†๋Š” ํŠน์ˆ˜๋ฌธ์ž ์ œ๊ฑฐ

2021.03.22

  • ํ•œ๊ตญ์–ด README ์ถ”๊ฐ€
  • ์„ค์ • ํŒŒ์ผ ์ด๋ฆ„ ๋ณ€๊ฒฝ user_settings.json โ†’ config.json
  • ๋ฉ”์ผ ๋‹ค์šด๋กœ๋“œ ์ˆœ์„œ ๋ณ€๊ฒฝ (์ œ์ผ ์˜ค๋ž˜๋œ ๋ฉ”์ผ๋ถ€ํ„ฐ)
  • Customizable ๋ฉ”์ผ ์ €์žฅ ๊ฒฝ๋กœ
  • Standalone bundle ์ œ๊ณต
  • CSS, ์‚ฌ์ง„ ๋ณ„๋„ ์ €์žฅ ์˜ต์…˜
  • ๋ฐฑ์—… ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์Šค์บ”ํ•˜์ง€ ์•Š๊ณ  ๋ณ„๋„์˜ INDEX๋ฅผ ํ†ตํ•ด ๋‹ค์šด๋กœ๋“œํ•œ ๋ฉ”์ผ ๊ด€๋ฆฌ
  • Verbose error logs

์‹œ์ž‘ํ•˜๊ธฐ

IZMS๋Š” ๋‹ค์Œ ํ™˜๊ฒฝ์—์„œ ํ…Œ์ŠคํŠธ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • Python 3.9~
  • macOS 10.15~
  • Windows 10
  • Ubuntu 20.04 64-bit

๋ฐฉ๋ฒ•1: Standalone ํŒจํ‚ค์ง€

๋ฏธ๋ฆฌ ๋นŒ๋“œ๋œ ์‹คํ–‰ ํŒŒ์ผ์„ ์ด์šฉํ•˜์—ฌ ํŒŒ์ด์ฌ์ด๋‚˜ ๊ธฐํƒ€ ์ข…์†์„ฑ์„ ์„ค์น˜ํ•˜์ง€ ์•Š๊ณ  IZMS๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1. IZMS ์‹คํ–‰ํŒŒ์ผ ๋‹ค์šด๋กœ๋“œ ๋ฐ ์••์ถ• ํ’€๊ธฐ

IZMS ๋ฆด๋ฆฌ์ฆˆ ํŽ˜์ด์ง€ ์—์„œ ์ž์‹ ์˜ ์šด์˜์ฒด์ œ์— ๋งž๋Š” ๋ฒ„์ „์„ ๋‹ค์šด๋ฐ›๊ณ  ์••์ถ•์„ ํ’‰๋‹ˆ๋‹ค.

โš ๏ธ ๋‹ค์šด๋ฐ›์„ ๋•Œ ๋ธŒ๋ผ์šฐ์ €์— ๋”ฐ๋ผ ๊ฒฝ๊ณ ์ฐฝ์ด ๋œจ๋ฉฐ ๋‹ค์šด๋กœ๋“œ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ IZMS ์‹คํ–‰ํŒŒ์ผ์ด ์ธ์ฆ์„œ๋กœ ์„œ๋ช…๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์ด๋ฉฐ, '๊ณ„์†'์„ ๋ˆŒ๋Ÿฌ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„œ๋ช…๋˜์ง€ ์•Š์€ ์‹คํ–‰ํŒŒ์ผ์€ ์ผ๋ถ€ ๋ฐฑ์‹  ํ”„๋กœ๊ทธ๋žจ์—์„œ ๋ฐ”์ด๋Ÿฌ์Šค๋กœ ์ธ์‹ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ๋ฐฑ์‹ ์—์„œ ์˜ˆ์™ธ ๋“ฑ๋ก์„ ํ•˜๊ฑฐ๋‚˜ ๋ฐฉ๋ฒ•2๋กœ ์‹œ๋„ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

2. config.json ์„ค์ •

๐Ÿ“ข HKT48 Mail์˜ ๊ฒฝ์šฐ config.json์ด ์•„๋‹Œ config_hkt48mail.json์„ ์ˆ˜์ •

{
  // ...
  "profile": {
    "user-id": "์œ ์ € ID",
    "access-token": "์•ก์„ธ์Šค ํ† ํฐ",
    // ...
  }
}

์‹คํ–‰์„ ์œ„ํ•ด์„œ๋Š” ๋จผ์ € ์„ค์ • ํŒŒ์ผ config.json์„ ์ˆ˜์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. Charles, Wireshark, Burp Suite๋“ฑ์˜ SSL ํŒจํ‚ท ์บก์ฒ˜ ํˆด์„ ์ด์šฉํ•˜์—ฌ ์•Œ์•„๋‚ธ ์ž์‹ ์˜ user-id์™€ access-token์„ config.json์— ์ž…๋ ฅํ•ฉ๋‹ˆ๋‹ค.

์•„๋ž˜๋Š” user-id, access-token์„ ์ž…๋ ฅํ•œ ์™„์ „ํ•œ config.json์˜ ์˜ˆ์‹œ์ž…๋‹ˆ๋‹ค.

Example - config.json

{
  "bundle_id": "com.ca-smart.izonemail",
  "destination": "incoming",
  "mail_path": "/mail/{member_id}/{mail_id}.html",
  "profile_image_path": "/",
  "css_path": "/css",
  "image_path": "/img",
  "max_workers": 8,
  "profile": {
    "user-id": "57crzfhy4is0",
    "access-token": "klcr55c7000k82f1603oa6al",
    "os-type": "iOS",
    "terms-version": "5",
    "application-version": "1.2.3",
    "application-language": "ko"
  }
}

3. ์‹คํ–‰

ํ„ฐ๋ฏธ๋„์„ ์—ด๊ณ  ์••์ถ•์„ ํ‘ผ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์œˆ๋„์šฐ์˜ ๊ฒฝ์šฐ ํ„ฐ๋ฏธ๋„์€ powershell์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.

> cd "IZMS ๊ฒฝ๋กœ"

์•ฑ์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

3-1. ์•„์ด์ฆˆ์› ๋ฉ”์ผ
> ./izms
3-2. HKT48 Mail
> ./izms -c config_hkt48mail.json

๐Ÿ“ข HKT48 Mail๋งŒ ๋ฐฑ์—…ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ config_hkt48mail.json ํŒŒ์ผ๋ช…์„ config.json์œผ๋กœ ๋ณ€๊ฒฝ ํ›„ ์•„๋ฌด๋Ÿฐ ์˜ต์…˜ ์—†์ด ์‹คํ–‰์‹œ์ผœ๋„ ๋ฉ๋‹ˆ๋‹ค.

cmd_demo01

๋งŒ์•ฝ user-id๋‚˜ access-token์„ ์ž˜๋ชป ์ž…๋ ฅํ–ˆ์„ ๊ฒฝ์šฐ 401 Unauthorized ์—๋Ÿฌ๊ฐ€ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค.

4. ๋‹ค์šด๋กœ๋“œ ๋ฐ›์€ ๋ฉ”์ผ ํ™•์ธํ•˜๊ธฐ

๊ธฐ๋ณธ๊ฐ’์„ ๋ฐ”๊พธ์ง€ ์•Š์œผ๋ฉด ๋ฉ”์ผ์€ incoming/ ํด๋”์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ•2: ์†Œ์Šค์—์„œ ์ง์ ‘ ์‹คํ–‰

1. Clone repo

> git clone https://github.com/coloriz/izms.git
> cd izone-mail-shelter

2. Install dependencies

> pip install -r requirements.txt

3. config.json ์„ค์ •

๋ฐฉ๋ฒ•1 ์ฐธ์กฐ.

4. ์‹คํ–‰

> python izms.py

์„ค์ • ๊ฐ€์ด๋“œ

์„ค์ • ๊ธฐ๋ณธ๊ฐ’์„ ๋ณ€๊ฒฝํ•˜๊ธธ ์›ํ•˜๋Š” ๊ฒฝ์šฐ ๊ฐ€์ด๋“œ๋ฅผ ์ •ํ™•ํžˆ ์ฝ๊ณ  ์ง„ํ–‰ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค. IZMS๋Š” ๋ฉ”์ผ ํŒŒ์ผ๋ช…์ด ์ค‘๋ณต๋˜์–ด๋„ ๊ฒฝ๊ณ ๋‚˜ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ๋„์šฐ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

IZMS ์‹คํ–‰์„ ์œ„ํ•ด์„  config.json ํŒŒ์ผ์ด ์‹คํ–‰ํŒŒ์ผ๊ณผ ๊ฐ™์€ ์œ„์น˜์— ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. config.json ํŒŒ์ผ ์ˆ˜์ •์„ ํ†ตํ•ด ๋ฉ”์ผ ์ €์žฅ ๊ฒฝ๋กœ, HTML์— ์ด๋ฏธ์ง€ ํฌํ•จ ์—ฌ๋ถ€ ๋“ฑ์„ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ค๋ช…์„ ์œ„ํ•ด ์•„๋ž˜ ๋ฉ”์ผ์„ ์˜ˆ์‹œ๋กœ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ฉ”์ผID : m21937
๋ฉค๋ฒ„์ด๋ฆ„ : ๋ฏธ์•ผ์™€ํ‚ค ์‚ฌ์ฟ ๋ผ
๋ฉค๋ฒ„ID : 2
์ˆ˜์‹ ์ผ์‹œ : 2021/03/22 10:46
์ œ๋ชฉ : ๐Ÿฅบ๐Ÿ’—๐ŸŒธ

๋ฉ”์ผ ์ €์žฅ ๊ฒฝ๋กœ

๋‹ค์Œ์€ mail_path๊ฐ’์„ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ฉ”์ผ ์ €์žฅ ๊ฒฝ๋กœ๋ฅผ ์ปค์Šคํ„ฐ๋งˆ์ด์ง•ํ•˜๋Š” ๋ช‡ ๊ฐ€์ง€ ์˜ˆ์‹œ๋ฅผ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

๋ฉค๋ฒ„ID๋กœ ํด๋” ๋ถ„๋ฅ˜, ๋ฉ”์ผID๋กœ ์ €์žฅ (๊ธฐ๋ณธ๊ฐ’)

{
  "mail_path": "/mail/{member_id}/{mail_id}.html"
}
// ์‹ค์ œ ๋ฉ”์ผ ์ €์žฅ ๊ฒฝ๋กœ : incoming/mail/2/m21937.html

๋ฉค๋ฒ„ID๊ฐ€ ์•„๋‹Œ ๋ฉค๋ฒ„์ด๋ฆ„ ํด๋”์— ์ €์žฅ

{
  "mail_path": "/mail/{member_name}/{mail_id}.html"
}
// ์‹ค์ œ ๋ฉ”์ผ ์ €์žฅ ๊ฒฝ๋กœ : incoming/mail/๋ฏธ์•ผ์™€ํ‚ค ์‚ฌ์ฟ ๋ผ/m21937.html

๋ชจ๋“  ๋ฉ”์ผ์„ ํ•œ ํด๋”์— ์ €์žฅ

{
  "mail_path": "/mail/{mail_id}.html"
}
// ์‹ค์ œ ๋ฉ”์ผ ์ €์žฅ ๊ฒฝ๋กœ : incoming/mail/m21937.html

๋ฉ”์ผ ์ˆ˜์‹ ์ผ๋กœ ๋ถ„๋ฅ˜, ๋ฉ”์ผ ์ œ๋ชฉ์„ ํŒŒ์ผ๋ช…์œผ๋กœ ์‚ฌ์šฉ

{
  "mail_path": "/mail/{received:%Y%m%d}/{mail_id}_{subject}.html"
}
// ์‹ค์ œ ๋ฉ”์ผ ์ €์žฅ ๊ฒฝ๋กœ : incoming/mail/20210322/m21937_๐Ÿฅบ๐Ÿ’—๐ŸŒธ.html

โš ๏ธ ๋ฉ”์ผ ์ œ๋ชฉ์— ์ด๋ชจ์ง€๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์šด์˜์ฒด์ œ๋Š” ์ด๋ชจ์ง€๊ฐ€ ๋“ค์–ด๊ฐ„ ํŒŒ์ผ๋ช…์„ ์ œ๋Œ€๋กœ ํ•ธ๋“ค๋งํ•˜์ง€ ๋ชป ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ๋ฉ”์ผ ์ œ๋ชฉ์„ ํŒŒ์ผ๋ช…์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ๊ทธ๋‹ค์ง€ ์ถ”์ฒœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ, ํŒŒ์ผ๋ช…์— ํ•ญ์ƒ mail_id๋ฅผ ํฌํ•จ์‹œํ‚ค๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค. mail_id๋งŒ์ด ๋ฉ”์ผ์„ ์œ ์ผํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ์ˆ˜๋‹จ์ž…๋‹ˆ๋‹ค.

๋ฉ”์ผ ์ˆ˜์‹ ์ผ๋กœ ๋ถ„๋ฅ˜, ๋ฉค๋ฒ„์ด๋ฆ„๊ณผ ๋ฉ”์ผ ์ œ๋ชฉ์„ ํŒŒ์ผ๋ช…์œผ๋กœ ์‚ฌ์šฉ

{
  "mail_path": "/mail/{received:%Y%m%d}/{mail_id}_{member_name}_{subject}.html"
}
// ์‹ค์ œ ๋ฉ”์ผ ์ €์žฅ ๊ฒฝ๋กœ : incoming/mail/20210322/m21937_๋ฏธ์•ผ์™€ํ‚ค ์‚ฌ์ฟ ๋ผ_๐Ÿฅบ๐Ÿ’—๐ŸŒธ.html

์ด๋ฏธ์ง€, CSS ์ž„๋ฒ ๋”ฉ ์—ฌ๋ถ€

์ด๋ฏธ์ง€์™€ CSS๋ฅผ ๋ณ„๋„ ๊ฒฝ๋กœ์— ์ €์žฅ (๊ธฐ๋ณธ๊ฐ’)

{
  "profile_image_path": "/",
  "css_path": "/css",
  "image_path": "/img"
}
// ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ ์ €์žฅ ๊ฒฝ๋กœ : incoming/ (์›๋ž˜ ์„œ๋ฒ„์˜ path ๊ตฌ์กฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์ €์žฅ)
// CSS ์ €์žฅ ๊ฒฝ๋กœ : incoming/css/
// ์ด๋ฏธ์ง€ ์ €์žฅ ๊ฒฝ๋กœ : incoming/img/

์ด๋ฏธ์ง€์™€ CSS๋ฅผ HTML ์•ˆ์— ํฌํ•จ์‹œํ‚ค๊ธฐ

{
  "profile_image_path": null,
  "css_path": null,
  "image_path": null
}

์ด ๊ฒฝ์šฐ ๋ชจ๋“  ์ •๋ณด๊ฐ€ HTML ํŒŒ์ผ ์•ˆ์— ํฌํ•จ๋˜๋ฏ€๋กœ ๋‚˜์ค‘์— HTML ํŒŒ์ผ ์œ„์น˜๋ฅผ ๋ฐ”๊ฟ”๋„ ๋ ˆ์ด์•„์›ƒ์ด๋‚˜ ์ด๋ฏธ์ง€๊ฐ€ ๊นจ์ง€์ง€ ์•Š๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

CSS๋Š” HTML์˜ <style>ํƒœ๊ทธ ์•ˆ์—, ์ด๋ฏธ์ง€๋Š” base64๋กœ ์ธ์ฝ”๋”ฉ๋˜์–ด ๋‚ด์žฅ๋ฉ๋‹ˆ๋‹ค.

Appendix

INDEX, HEAD ํŒŒ์ผ์— ๋Œ€ํ•ด

์ฒซ ์‹คํ–‰์‹œ ์ƒ์„ฑ๋˜๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์ผ๋กœ์จ ๋กœ์ปฌ์— ๋‹ค์šด๋กœ๋“œํ•œ ๋ฉ”์ผ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์„ค์ • ํŒŒ์ผ ๋ณ€๊ฒฝ ๋“ฑ์˜ ์ด์œ ๋กœ ๋ฐฑ์—…์„ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ ๋‹ค์šด๋กœ๋“œ ํด๋”์™€ ์ด ๋‘ ํŒŒ์ผ์„ ์‚ญ์ œํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

config.json

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค์ • ํŒŒ์ผ์ž…๋‹ˆ๋‹ค. ์‹คํ–‰ํŒŒ์ผ๊ณผ ๊ฐ™์€ ํด๋”์— ์œ„์น˜ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ์œ ํšจํ•œ key๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

bundle_id (str, default: 'com.ca-smart.izonemail')

๋ฐฑ์—…ํ•  ๋ฉ”์ผ์•ฑ์˜ bundle id์ž…๋‹ˆ๋‹ค. ์ด ๊ฐ’์— ๋”ฐ๋ผ ์š”์ฒญํ•˜๋Š” API endpoint, CSS ๋“ฑ์ด ๊ฒฐ์ •๋ฉ๋‹ˆ๋‹ค.

  • com.ca-smart.izonemail
  • com.camobile.hkt48mail

destination (str, default: 'incoming')

๋ฉ”์ผ๊ณผ ๊ธฐํƒ€ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋  ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค.

mail_path (str, required)

๋ฉ”์ผ ์ €์žฅ ๊ฒฝ๋กœ ํ…œํ”Œ๋ฆฟ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์น˜ํ™˜๊ฐ€๋Šฅํ•œ ๋ณ€์ˆ˜๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • {member_id}: ๋ฉค๋ฒ„ ID (str)
  • {member_name}: ๋ฉค๋ฒ„ ์ด๋ฆ„ (str)
  • {mail_id}: ๋ฉ”์ผ ID (str)
  • {received}: ๋ฉ”์ผ ์ˆ˜์‹ ์ผ์‹œ (datetime)
  • {subject}: ๋ฉ”์ผ ์ œ๋ชฉ (str)

profile_image_path (str or null, default: '/')

ํ”„๋กœํ•„ ์‚ฌ์ง„์ด ์ €์žฅ๋  ์ ˆ๋Œ€๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ์กด ์„œ๋ฒ„์˜ path๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ด ๊ฐ’์ด null์ธ ๊ฒฝ์šฐ ํ”„๋กœํ•„ ์‚ฌ์ง„์€ base64 ์ธ์ฝ”๋”ฉ๋˜์–ด HTML์— ๋‚ด์žฅ๋ฉ๋‹ˆ๋‹ค.

css_path (str or null, default: '/css')

CSS๊ฐ€ ์ €์žฅ๋  ์ ˆ๋Œ€๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ ์ด ๊ฐ’์ด null์ธ ๊ฒฝ์šฐ CSS๋Š” HTML์— ๋‚ด์žฅ๋ฉ๋‹ˆ๋‹ค.

image_path (str or null, default: '/img')

๋ฉ”์ผ ๋ณธ๋ฌธ์˜ ์‚ฌ์ง„์ด ์ €์žฅ๋  ์ ˆ๋Œ€๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ ์ €์žฅ ์œ„์น˜๋Š” ์‹ค์ œ ์„œ๋ฒ„์˜ path์—์„œ ๋งจ ๋์˜ 3๊ฐœ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ /img/{๋ฉค๋ฒ„ID}/{๋ฉ”์ผ๋ฐœ์‹ ์ผYYYYMMDD}/{ํŒŒ์ผ๋ช…}์˜ ํ˜•ํƒœ๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

profile (object, required)

REST API ์š”์ฒญ์— ์‚ฌ์šฉ๋˜๋Š” ํ—ค๋”๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. key๋Š” ๋ชจ๋‘ ์†Œ๋ฌธ์ž์ž…๋‹ˆ๋‹ค.

  • user-id: ์œ ์ € ID

  • access-token: ์•ก์„ธ์Šค ํ† ํฐ

  • terms-version: ์•ฝ๊ด€ ๋™์˜ ๋ฒ„์ „ ("5")

  • os-type: ๋ชจ๋ฐ”์ผ ์šด์˜์ฒด์ œ ํƒ€์ž… ["iOS", "android"]

  • application-version: ํ”„๋ฉ”์•ฑ ๋ฒ„์ „ iOS: "1.2.3", android: "1.4.5" (์ž‘์„ฑ์ผ(2021.03.22) ๊ธฐ์ค€)

  • application-language: ์•ฑ ์–ธ์–ด ["ko", "ja", "en"] (๋ฉค๋ฒ„ ์ด๋ฆ„ ์–ธ์–ด๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Œ)

  • ๊ธฐํƒ€ optional header: device-version, os-version

  • ๊ธฐํƒ€ HTTP header: user-agent, accept-encoding, accept, accept-language

timeout (float, default: 5)

HTTP ์š”์ฒญ timeout (์ดˆ)

max_retries (int, default: 3)

HTTP ์š”์ฒญ ์‹คํŒจ์‹œ ์ตœ๋Œ€ ์žฌ์‹œ๋„ ํšŸ์ˆ˜

max_workers (int, default: 8)

HTTP ์š”์ฒญ๊ณผ ์ €์žฅ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์Šค๋ ˆ๋“œ ๊ฐœ์ˆ˜

head (str, default: 'HEAD')

๊ฐ€์žฅ ์ตœ๊ทผ์— ๋ฐ›์€ ๋ฉ”์ผ์˜ ์ผ์‹œ๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์ผ๋ช…์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

index (str, default: 'INDEX')

์„ฑ๊ณต์ ์œผ๋กœ ๋‹ค์šด๋กœ๋“œ ๋ฐ›์€ ๋ฉ”์ผ์˜ id๋ฅผ ์ €์žฅํ•˜๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์ผ๋ช…์„ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค.

finish_hook (str)

ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ์‹œ ํ˜ธ์ถœ๋  ํ•ธ๋“ค๋Ÿฌ ๊ฒฝ๋กœ (args: "program name" "num of downloaded mails")