ผมเคยมีปัญหากับ Email Server จึงตัดสินใจย้ายไปใช้ Amazon Simple Email Service (SES) แทน แต่ SES บันทึกอีเมลใหม่ไว้ใน S3 Bucket — การใช้ AWS Management Console อ่านไฟล์ใน S3 ทุกครั้งก็ลำบากและช้า
จึงเขียน Bash Script เพื่อ อัตโนมัติ กระบวนการ: ดาวน์โหลด → จัดเก็บเรียบร้อย → เปิดอ่าน — ทั้งหมดในคำสั่งเดียว
Script นี้เขียนสำหรับ Ubuntu Desktop แต่ปรับให้ทำงานบน macOS หรือ Windows 10 (WSL) ได้ไม่ยาก
สคริปต์เต็ม (Complete Script)
#!/bin/bash
# 1. ดาวน์โหลดอีเมลใหม่จาก S3 ไปยัง tmpemails/
aws s3 cp \
--recursive \
s3://bucket-name/ \
/home/david/s3-emails/tmpemails/ \
--profile myaccount
# 2. ตั้งค่าตัวแปรพาธ
tmp_file_location=/home/david/s3-emails/tmpemails/*
base_location=/home/david/s3-emails/emails/
# 3. สร้างโฟลเดอร์วันนี้สำหรับเก็บอีเมล
today=$(date +"%m_%d_%Y")
[[ -d ${base_location}/"$today" ]] || mkdir ${base_location}/"$today"
# 4. เปลี่ยนชื่อไฟล์ให้อ่านง่าย และย้ายไปโฟลเดอร์วันนี้
for FILE in $tmp_file_location; do
mv $FILE ${base_location}/${today}/email$(rand)
done
# 5. เปิดไฟล์ใหม่ทั้งหมดใน Gedit
for NEWFILE in ${base_location}/${today}/*; do
gedit $NEWFILE
done
อธิบายแต่ละส่วน
1. ดาวน์โหลดจาก S3
aws s3 cp --recursive s3://bucket-name/ /home/david/s3-emails/tmpemails/ --profile myaccount
cp= Copy--recursive= ใช้กับหลายไฟล์s3://bucket-name/= Bucket ต้นทาง (เปลี่ยนเป็นของคุณ)/home/david/...= พาธปลายทางบนเครื่อง--profile myaccount= ใช้ AWS Profile ใด (หากมีหลายบัญชี)
ต้องติดตั้งและตั้งค่า AWS CLI ก่อน
2. ตัวแปรพาธ
tmp_file_location=/home/david/s3-emails/tmpemails/*
base_location=/home/david/s3-emails/emails/
* ท้าย tmp_file_location หมายถึง "ไฟล์ภายในไดเรกทอรี" ไม่ใช่ไดเรกทอรีเอง
3. สร้างโฟลเดอร์ตามวันที่
today=$(date +"%m_%d_%Y")
[[ -d ${base_location}/"$today" ]] || mkdir ${base_location}/"$today"
date +"%m_%d_%Y"→ รูปแบบ MM_DD_YYYY (เช่น 02_27_2020)[[ -d ... ]] || mkdir ...= ถ้ายังไม่มีโฟลเดอร์นี้ → สร้างใหม่ (กัน Error ซ้ำ)
4. เปลี่ยนชื่อและย้ายไฟล์
for FILE in $tmp_file_location; do
mv $FILE ${base_location}/${today}/email$(rand)
done
- Loop ทุกไฟล์ใน tmp → ย้ายไปโฟลเดอร์วันนี้
- ตั้งชื่อใหม่:
email+ เลขสุ่มจากrand(กันชื่อซ้ำ) - เก่าประกาศใช้ตัวนับลำดับ (1,2,3...) แต่หากรันหลายรอบในวันเดียวกัน จะทับซ้อน → เลขสุ่มปลอดภัยกว่า (Range 1-32,576)
- ติดตั้ง
rand:apt install rand(Ubuntu)
5. เปิดอ่านใน Gedit
for NEWFILE in ${base_location}/${today}/*; do
gedit $NEWFILE
done
Loop เปิดทุกไฟล์ในโฟลเดอร์วันนี้ — * สำคัญมาก (ต้องระบุไฟล์ ไม่ใช่ไดเรกทอรี)
ลบอีเมลใน S3 หลังดาวน์โหลด (Cleanup)
หากไม่ลบใน Bucket รันครั้งต่อไปจะดาวน์โหลดซ้ำทั้งหมด → ยุ่งยาก
สคริปต์แยกสำหรับลบ:
#!/bin/bash
# ลบอีเมลทั้งหมดใน Bucket
aws s3 rm --recursive s3://bucket-name/ --profile myaccount
รันสคริปต์นี้หลังจากดาวน์โหลดและอ่านเสร็จ — เก็บ S3 ให้สะอาด
สรุป
Script นี้ช่วยให้ Workflow การจัดการอีเมลจาก SES → S3 → Local Machine เป็นอัตโนมัติ ลดขั้นตอน manual ลงมาก ปรับใช้ได้จริงใน Production