Я создал мою send_newsletter команды администратора с Джанго, когда я используюCrontab для отправки почты
python manage.py send_newsletter
это работает. Моего send_newsletter.py
sys.path.append('/srv/apps/')
sys.path.append('%s/actecil_newsletter' % os.getcwd())
sys.path.append('%s/actecil_newsletter/actecil_newsletter' % os.getcwd())
sys.path.append('/srv/apps/apps_django_1_4')
sys.path.append('/srv/apps/apps_django_1_4/Django-1.4.3')
if 'DJANGO_SETTINGS_MODULE' not in os.environ.keys():
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings'
class Command(BaseCommand):
args = '<mail_id, mail_id, ...>'
def handle(self, *args, **options):
mail = Mail.objects.all()
for mail in mail:
print "------------------------------------------------------------------------------------"
if not mail.sended :
soup = BeautifulSoup(mail.content)
subject = mail.subject
recipients = []
for t in mail.tags.all():
for r in t.recipients.all():
if not r in recipients:
recipients.append(r)
for r in mail.recipients.all():
if not r in recipients:
recipients.append(r)
if recipients:
for a in soup.find_all('a'):
link = Link()
link.link = (a.get('href'))
link.mail = mail
link.save()
a['href'] = "%s/compagnes/link/%s/%s/%s/" % (settings.WEBSITE_URL, mail.id, '-*{^@+*@=)=-+*-=+*-=*+=--=*-*=-==)@@###/[email protected]]}-*', link.id)
tag = soup.new_tag('img', src="%s/compagnes/mail/%s/%s/" % (settings.WEBSITE_URL, mail.id, '-*{^@+*@=)=-+*-=+*-=*+=--=*-*=-==)@@###/[email protected]]}-*'))
soup.body.insert_after(tag)
content = soup.prettify()
for r in recipients:
c = content.replace('-*{^@+*@=)=-+*-=+*-=*+=--=*-*=-==)@@###/[email protected]]}-*', "%s" % r.id)
msg = EmailMultiAlternatives(subject.encode('utf-8'), c.encode('utf-8'), settings.DEFAULT_FROM_EMAIL, [r.mail, ])
msg.attach_alternative(c, "text/html")
msg.send()
mail.sended = True
mail.date_sent = datetime.datetime.now()
mail.save()
Я создал хроны с
sudo crontab -e
на терминале и поместить его в файле кронтаб:
*/5 * * * * cd /srv/apps/newsletter/actecil_newsletter && python manage.py send_newsletter
Но это не работает, если кто-то знает, как это исправить?
EDIT: Я получил эту ошибку в журнале кронтаба
Traceback (most recent call last):
File "manage.py", line 9, in <module>
from django.core.management import execute_from_command_line
ImportError: No module named django.core.management
Может быть много чего. Cron должен отправить вам электронное письмо, когда оно не удастся; если вы не получите это письмо, вы можете перенаправить вывод, добавив '>/tmp/log 2> & 1' в конец задания cron и посмотрите на файл на наличие ошибок. –
Я думаю, что вы используете ubuntu, а в ubuntu работает crontab, но, к сожалению, код django не выполняется. Я предлагаю вам использовать джанго-сельдерей для этого. –
@JohnZwinck Я добавил журнал ошибок в вопрос. – Eowiena