mirror of
				https://github.com/zulip/zulip.git
				synced 2025-11-04 05:53:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			72 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import io
 | 
						|
import smtplib
 | 
						|
from contextlib import redirect_stderr
 | 
						|
from typing import Any
 | 
						|
 | 
						|
from django.conf import settings
 | 
						|
from django.core.mail import mail_admins, mail_managers, send_mail
 | 
						|
from django.core.management import CommandError
 | 
						|
from django.core.management.commands import sendtestemail
 | 
						|
from typing_extensions import override
 | 
						|
 | 
						|
from zerver.lib.send_email import FromAddress, log_email_config_errors
 | 
						|
 | 
						|
 | 
						|
class Command(sendtestemail.Command):
 | 
						|
    @override
 | 
						|
    def handle(self, *args: Any, **kwargs: str) -> None:
 | 
						|
        if settings.WARN_NO_EMAIL:
 | 
						|
            raise CommandError(
 | 
						|
                "Outgoing email not yet configured, see\n  "
 | 
						|
                "https://zulip.readthedocs.io/en/latest/production/email.html"
 | 
						|
            )
 | 
						|
 | 
						|
        log_email_config_errors()
 | 
						|
 | 
						|
        if len(kwargs["email"]) == 0:
 | 
						|
            raise CommandError(
 | 
						|
                "Usage: /home/zulip/deployments/current/manage.py "
 | 
						|
                "send_test_email username@example.com"
 | 
						|
            )
 | 
						|
 | 
						|
        print("If you run into any trouble, read:")
 | 
						|
        print()
 | 
						|
        print("  https://zulip.readthedocs.io/en/latest/production/email.html#troubleshooting")
 | 
						|
        print()
 | 
						|
        print("The most common error is not setting `ADD_TOKENS_TO_NOREPLY_ADDRESS=False` when")
 | 
						|
        print("using an email provider that doesn't support that feature.")
 | 
						|
        print()
 | 
						|
        print("Sending 2 test emails from:")
 | 
						|
 | 
						|
        message = (
 | 
						|
            "Success!  If you receive this message (and a second with a different subject), "
 | 
						|
            "you've successfully configured sending emails from your Zulip server.  "
 | 
						|
            "Remember that you need to restart "
 | 
						|
            "the Zulip server with /home/zulip/deployments/current/scripts/restart-server "
 | 
						|
            "after changing the settings in /etc/zulip before your changes will take effect."
 | 
						|
        )
 | 
						|
        with redirect_stderr(io.StringIO()) as f:
 | 
						|
            smtplib.SMTP.debuglevel = 1
 | 
						|
            try:
 | 
						|
                sender = FromAddress.SUPPORT
 | 
						|
                print(f"  * {sender}")
 | 
						|
                send_mail("Zulip email test", message, sender, kwargs["email"])
 | 
						|
 | 
						|
                noreply_sender = FromAddress.tokenized_no_reply_address()
 | 
						|
                print(f"  * {noreply_sender}")
 | 
						|
                send_mail("Zulip noreply email test", message, noreply_sender, kwargs["email"])
 | 
						|
            except smtplib.SMTPException as e:
 | 
						|
                print(f"Failed to send mails: {e}")
 | 
						|
                print()
 | 
						|
                print("Full SMTP log follows:")
 | 
						|
                print(f.getvalue())
 | 
						|
                raise CommandError("Email sending failed!")
 | 
						|
        print()
 | 
						|
        print("Successfully sent 2 emails to {}!".format(", ".join(kwargs["email"])))
 | 
						|
 | 
						|
        if kwargs["managers"]:
 | 
						|
            mail_managers("Zulip manager email test", "This email was sent to the site managers.")
 | 
						|
 | 
						|
        if kwargs["admins"]:
 | 
						|
            mail_admins("Zulip admins email test", "This email was sent to the site admins.")
 |