Can't send email in management command run by cron











up vote
0
down vote

favorite












I have a strange problem with a Django management command I am running via cron.



I've a production server set up to use Mailgun. I've a management command that simply sends an email:



from django.core.mail import send_mail

class Command(BaseCommand):
help = 'Send email'

def handle(self, *args, **options):
send_mail('Test email', 'Test content', 'noreply@example.com', ['me@example.com',], fail_silently=False)


This script works perfectly if I run it via the command line (I'm using virtualenvwrapper):



> workon myapp
> python manage.py do_command


or directly:



> /home/user/.venvs/project/bin/python /home/user/project/manage.py do_command


But when I set it up with cron (crontab -e):



*/1 * * * * /home/user/.venvs/project/bin/python /home/user/project/manage.py do_command


The script runs (without error), but the email isn't sent.



What could be going on?










share|improve this question


























    up vote
    0
    down vote

    favorite












    I have a strange problem with a Django management command I am running via cron.



    I've a production server set up to use Mailgun. I've a management command that simply sends an email:



    from django.core.mail import send_mail

    class Command(BaseCommand):
    help = 'Send email'

    def handle(self, *args, **options):
    send_mail('Test email', 'Test content', 'noreply@example.com', ['me@example.com',], fail_silently=False)


    This script works perfectly if I run it via the command line (I'm using virtualenvwrapper):



    > workon myapp
    > python manage.py do_command


    or directly:



    > /home/user/.venvs/project/bin/python /home/user/project/manage.py do_command


    But when I set it up with cron (crontab -e):



    */1 * * * * /home/user/.venvs/project/bin/python /home/user/project/manage.py do_command


    The script runs (without error), but the email isn't sent.



    What could be going on?










    share|improve this question
























      up vote
      0
      down vote

      favorite









      up vote
      0
      down vote

      favorite











      I have a strange problem with a Django management command I am running via cron.



      I've a production server set up to use Mailgun. I've a management command that simply sends an email:



      from django.core.mail import send_mail

      class Command(BaseCommand):
      help = 'Send email'

      def handle(self, *args, **options):
      send_mail('Test email', 'Test content', 'noreply@example.com', ['me@example.com',], fail_silently=False)


      This script works perfectly if I run it via the command line (I'm using virtualenvwrapper):



      > workon myapp
      > python manage.py do_command


      or directly:



      > /home/user/.venvs/project/bin/python /home/user/project/manage.py do_command


      But when I set it up with cron (crontab -e):



      */1 * * * * /home/user/.venvs/project/bin/python /home/user/project/manage.py do_command


      The script runs (without error), but the email isn't sent.



      What could be going on?










      share|improve this question













      I have a strange problem with a Django management command I am running via cron.



      I've a production server set up to use Mailgun. I've a management command that simply sends an email:



      from django.core.mail import send_mail

      class Command(BaseCommand):
      help = 'Send email'

      def handle(self, *args, **options):
      send_mail('Test email', 'Test content', 'noreply@example.com', ['me@example.com',], fail_silently=False)


      This script works perfectly if I run it via the command line (I'm using virtualenvwrapper):



      > workon myapp
      > python manage.py do_command


      or directly:



      > /home/user/.venvs/project/bin/python /home/user/project/manage.py do_command


      But when I set it up with cron (crontab -e):



      */1 * * * * /home/user/.venvs/project/bin/python /home/user/project/manage.py do_command


      The script runs (without error), but the email isn't sent.



      What could be going on?







      django






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 10 at 18:23









      Timmy O'Mahony

      39.8k8113147




      39.8k8113147
























          1 Answer
          1






          active

          oldest

          votes

















          up vote
          0
          down vote













          OK, the issue was that the wrong DJANGO_SETTINGS_MODULE env var was set and there were a few things throwing me off the scent:



          My manage.py script defaults to the "development" version of my settings: settings.local and this uses the command line email backend. Cron suppresses all output so I wasn't seeing that happening.



          Secondly, I was testing in a shell that already has DJANGO_SETTINGS_MODULE set to settings.production, so it appeared that the script ran correctly when I ran it on the command line.



          The fix is easy, add DJANGO_SETTINGS_MODULE to the crontab:



          DJANGO_SETTINGS_MODULE=config.settings.production
          */1 * * * * ...





          share|improve this answer





















            Your Answer






            StackExchange.ifUsing("editor", function () {
            StackExchange.using("externalEditor", function () {
            StackExchange.using("snippets", function () {
            StackExchange.snippets.init();
            });
            });
            }, "code-snippets");

            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "1"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            convertImagesToLinks: true,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: 10,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














             

            draft saved


            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53242072%2fcant-send-email-in-management-command-run-by-cron%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes








            up vote
            0
            down vote













            OK, the issue was that the wrong DJANGO_SETTINGS_MODULE env var was set and there were a few things throwing me off the scent:



            My manage.py script defaults to the "development" version of my settings: settings.local and this uses the command line email backend. Cron suppresses all output so I wasn't seeing that happening.



            Secondly, I was testing in a shell that already has DJANGO_SETTINGS_MODULE set to settings.production, so it appeared that the script ran correctly when I ran it on the command line.



            The fix is easy, add DJANGO_SETTINGS_MODULE to the crontab:



            DJANGO_SETTINGS_MODULE=config.settings.production
            */1 * * * * ...





            share|improve this answer

























              up vote
              0
              down vote













              OK, the issue was that the wrong DJANGO_SETTINGS_MODULE env var was set and there were a few things throwing me off the scent:



              My manage.py script defaults to the "development" version of my settings: settings.local and this uses the command line email backend. Cron suppresses all output so I wasn't seeing that happening.



              Secondly, I was testing in a shell that already has DJANGO_SETTINGS_MODULE set to settings.production, so it appeared that the script ran correctly when I ran it on the command line.



              The fix is easy, add DJANGO_SETTINGS_MODULE to the crontab:



              DJANGO_SETTINGS_MODULE=config.settings.production
              */1 * * * * ...





              share|improve this answer























                up vote
                0
                down vote










                up vote
                0
                down vote









                OK, the issue was that the wrong DJANGO_SETTINGS_MODULE env var was set and there were a few things throwing me off the scent:



                My manage.py script defaults to the "development" version of my settings: settings.local and this uses the command line email backend. Cron suppresses all output so I wasn't seeing that happening.



                Secondly, I was testing in a shell that already has DJANGO_SETTINGS_MODULE set to settings.production, so it appeared that the script ran correctly when I ran it on the command line.



                The fix is easy, add DJANGO_SETTINGS_MODULE to the crontab:



                DJANGO_SETTINGS_MODULE=config.settings.production
                */1 * * * * ...





                share|improve this answer












                OK, the issue was that the wrong DJANGO_SETTINGS_MODULE env var was set and there were a few things throwing me off the scent:



                My manage.py script defaults to the "development" version of my settings: settings.local and this uses the command line email backend. Cron suppresses all output so I wasn't seeing that happening.



                Secondly, I was testing in a shell that already has DJANGO_SETTINGS_MODULE set to settings.production, so it appeared that the script ran correctly when I ran it on the command line.



                The fix is easy, add DJANGO_SETTINGS_MODULE to the crontab:



                DJANGO_SETTINGS_MODULE=config.settings.production
                */1 * * * * ...






                share|improve this answer












                share|improve this answer



                share|improve this answer










                answered Nov 10 at 18:40









                Timmy O'Mahony

                39.8k8113147




                39.8k8113147






























                     

                    draft saved


                    draft discarded



















































                     


                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53242072%2fcant-send-email-in-management-command-run-by-cron%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    The Sandy Post

                    Danny Elfman

                    Pages that link to "Head v. Amoskeag Manufacturing Co."