Build an Email Simulator - Step 45

Tell us what’s happening:

I keep getting the message 1. You should add a print statement in the send_email method that confirms the email was sent. even though I wrote a print statement that follows the instructions.

Your code so far

import datetime

class Email:
    def __init__(self, sender, receiver, subject, body):
        self.sender = sender
        self.receiver = receiver
        self.subject = subject
        self.body = body
        self.timestamp = datetime.datetime.now()
        self.read = False

    def mark_as_read(self):
        self.read = True

    def display_full_email(self):
        self.mark_as_read()
        print('\n--- Email ---')
        print(f'From: {self.sender.name}')
        print(f'To: {self.receiver.name}')
        print(f'Subject: {self.subject}')
        print(f"Received: {self.timestamp.strftime('%Y-%m-%d %H:%M')}")
        print(f'Body: {self.body}')
        print('------------\n')

    def __str__(self):
        status = 'Read' if self.read else 'Unread'
        return f"[{status}] From: {self.sender.name} | Subject: {self.subject} | Time: {self.timestamp.strftime('%Y-%m-%d %H:%M')}"

class User:
    def __init__(self, name):
        self.name = name
        self.inbox = Inbox()


# User Editable Region

    def send_email(self, receiver, subject, body):
        email = Email(sender=self, receiver=receiver, subject=subject, body=body)
        receiver.inbox.receive_email(email)
        print(f'Email sent from {self} to {receiver}!')

    

# User Editable Region

class Inbox:
    def __init__(self):
        self.emails = []

    def receive_email(self, email):
        self.emails.append(email)

    def list_emails(self):
        if not self.emails:
            print('Your inbox is empty.\n')
            return
        print('\nYour Emails:')
        for i, email in enumerate(self.emails, start=1):
            print(f'{i}. {email}')

    def read_email(self, index):
        if not self.emails:
            print('Inbox is empty.\n')
            return
        actual_index = index - 1
        if actual_index < 0 or actual_index >= len(self.emails):
            print('Invalid email number.\n')
            return
        self.emails[actual_index].display_full_email()

    def delete_email(self, index):
        if not self.emails:
            print('Inbox is empty.\n')
            return
        actual_index = index - 1
        if actual_index < 0 or actual_index >= len(self.emails):
            print('Invalid email number.\n')
            return
        del self.emails[actual_index]
        print('Email deleted.\n')

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/145.0.0.0 Safari/537.36

Challenge Information:

Build an Email Simulator - Step 45

I didn’t put in the \n when I sent the topic but even after putting it, I still get the exact same message. This is my code: def send_email(self, receiver, subject, body):

    email = Email(sender=self, receiver=receiver, subject=subject, body=body)

    receiver.inbox.receive_email(email)

    print(f'Email sent from {self} to {receiver}!\\n')

what is the value of self and receiver? are those the names? or there is more in those variables?

You can test with:

    tory = User('Tory')
    ramy = User('Ramy')        
    tory.send_email(ramy, 'Hello', 'Hi Ramy, just saying hello!')
    ramy.send_email(tory, 'Re: Hello', 'Hi Tory, hope you are fine.')

I tested my code using your code and it gave me some weird stuff. I changed self to self.name and receiver to receiver.name and it works fine. Thanks

worked…but makes no sense…why can’t we use sender.name then? no consistency here. or any guidance other then this forum.

are you asking why it is mandatory to use self.name in the print instead of sender.name? you don’t have a sender variable, you have self, receiver, subject, body, which are the parameters of the send_email function. Even if inside Email you write sender=self that does not make a new sender variable, that is for the argument of Email

if you have additional questions I suggest you create your own topic

If you have a question about a specific challenge as it relates to your written code for that challenge and need some help, click the Help button located on the challenge.

The Help button will create a new topic with all code you have written and include a link to the challenge also. You will still be able to ask any questions in the post before submitting it to the forum.

Thank you.