|
| 1 | +"""Example: List email logs and get a single message by ID.""" |
| 2 | + |
| 3 | +from datetime import datetime |
| 4 | +from datetime import timedelta |
| 5 | +from datetime import timezone |
| 6 | + |
| 7 | +import mailtrap as mt |
| 8 | +from mailtrap.models.email_logs import EmailLogsListFilters |
| 9 | +from mailtrap.models.email_logs import filter_category_equal |
| 10 | +from mailtrap.models.email_logs import filter_empty |
| 11 | +from mailtrap.models.email_logs import filter_to_ci_equal |
| 12 | + |
| 13 | +API_TOKEN = "YOUR_API_TOKEN" |
| 14 | +ACCOUNT_ID = "YOUR_ACCOUNT_ID" |
| 15 | + |
| 16 | +client = mt.MailtrapClient(token=API_TOKEN, account_id=ACCOUNT_ID) |
| 17 | +email_logs_api = client.email_logs_api.email_logs |
| 18 | + |
| 19 | + |
| 20 | +def list_email_logs(): |
| 21 | + """List email logs (first page).""" |
| 22 | + return email_logs_api.get_list() |
| 23 | + |
| 24 | + |
| 25 | +def list_email_logs_with_filters(): |
| 26 | + """List email logs from last 2 days, by category(s), with non-empty subject.""" |
| 27 | + now = datetime.now(timezone.utc) |
| 28 | + two_days_ago = now - timedelta(days=2) |
| 29 | + filters = EmailLogsListFilters( |
| 30 | + sent_after=two_days_ago.isoformat().replace("+00:00", "Z"), |
| 31 | + sent_before=now.isoformat().replace("+00:00", "Z"), |
| 32 | + subject=filter_empty("not_empty"), |
| 33 | + to=filter_to_ci_equal("recipient@example.com"), |
| 34 | + category=filter_category_equal(["Welcome Email", "Password Reset"]), |
| 35 | + ) |
| 36 | + return email_logs_api.get_list(filters=filters) |
| 37 | + |
| 38 | + |
| 39 | +def get_next_page(previous_response): |
| 40 | + """Fetch next page using cursor from previous response.""" |
| 41 | + if previous_response.next_page_cursor is None: |
| 42 | + return None |
| 43 | + return email_logs_api.get_list(search_after=previous_response.next_page_cursor) |
| 44 | + |
| 45 | + |
| 46 | +def get_message(message_id: str): |
| 47 | + """Get a single email log message by UUID.""" |
| 48 | + return email_logs_api.get_by_id(message_id) |
| 49 | + |
| 50 | + |
| 51 | +if __name__ == "__main__": |
| 52 | + # List first page |
| 53 | + response = list_email_logs() |
| 54 | + print(f"Total: {response.total_count}, messages: {len(response.messages)}") |
| 55 | + for msg in response.messages: |
| 56 | + print(f" {msg.message_id} | {msg.from_} -> {msg.to} | {msg.status}") |
| 57 | + |
| 58 | + # Get single message |
| 59 | + if response.messages: |
| 60 | + detail = get_message(response.messages[0].message_id) |
| 61 | + print(f"Detail: {detail.subject}, events: {len(detail.events)}") |
0 commit comments