Send email in Python conveniently for gmail using yagmail

Overview

yagmail -- Yet Another GMAIL/SMTP client

Join the chat at https://gitter.im/kootenpv/yagmail PyPI PyPI

For the asynchronous asyncio version, look here: https://github.com/kootenpv/aioyagmail

The goal here is to make it as simple and painless as possible to send emails.

In the end, your code will look something like this:

import yagmail
yag = yagmail.SMTP()
contents = ['This is the body, and here is just text http://somedomain/image.png',
            'You can find an audio file attached.', '/local/path/song.mp3']
yag.send('[email protected]', 'subject', contents)

Or a simple one-liner:

yagmail.SMTP('mygmailusername').send('[email protected]', 'subject', 'This is the body')

Note that it will read the password securely from your keyring (read below). If you don't want this, you can also initialize with:

yag = yagmail.SMTP('mygmailusername', 'mygmailpassword')

In 2020, I personally prefer: using an Application-Specific Password

Table of Contents

Section Explanation
Install Find the instructions on how to install yagmail here
Username and password No more need to fill in username and password in scripts
Start a connection Get started
Usability Shows some usage patterns for sending
Recipients How to send to multiple people, give an alias or send to self
Magical contents Really easy to send text, html, images and attachments
Feedback How to send me feedback
Roadmap (and priorities) Yup
Errors List of common errors for people dealing with sending emails

Install

For Python 2.x and Python 3.x respectively:

pip install yagmail[all]
pip3 install yagmail[all]

If you get problems installing keyring, try installing without, i.e. pip install yagmail.

As a side note, yagmail can now also be used to send emails from the command line.

Username and password

keyring quoted:

The Python keyring lib provides a easy way to access the system keyring service from python. It can be used in any application that needs safe password storage.

You know you want it. Set it up by opening a Python interpreter and running:

import yagmail
yagmail.register('mygmailusername', 'mygmailpassword')

In fact, it is just a wrapper for keyring.set_password('yagmail', 'mygmailusername', 'mygmailpassword').

When no password is given and the user is not found in the keyring, getpass.getpass() is used to prompt the user for a password. Upon entering this once, it can be stored in the keyring and never asked again.

Another convenience can be to save a .yagmail file in your home folder, containing just the email username. You can then omit everything, and simply use yagmail.SMTP() to connect. Of course, this wouldn't work with more accounts, but it might be a nice default. Upon request I'll consider adding more details to this .yagmail file (host, port and other settings).

Start a connection

yag = yagmail.SMTP('mygmailusername')

Note that this connection is reusable, closable and when it leaves scope it will clean up after itself in CPython.

As tilgovi points out in #39, SMTP does not automatically close in PyPy. The context manager with should be used in that case.

Usability

Defining some variables:

to = '[email protected]'
to2 = '[email protected]'
to3 = '[email protected]'
subject = 'This is obviously the subject'
body = 'This is obviously the body'
html = '<a href="https://pypi.python.org/pypi/sky/">Click me!</a>'
img = '/local/file/bunny.png'

All variables are optional, and know that not even to is required (you'll send an email to yourself):

yag.send(to = to, subject = subject, contents = body)
yag.send(to = to, subject = subject, contents = [body, html, img])
yag.send(contents = [body, img])

Furthermore, if you do not want to be explicit, you can do the following:

yag.send(to, subject, [body, img])

Recipients

It is also possible to send to a group of people by providing a list of email strings rather than a single string:

yag.send(to = to)
yag.send(to = [to, to2]) # List or tuples for emailadresses *without* aliases
yag.send(to = {to : 'Alias1'}) # Dictionary for emailaddress *with* aliases
yag.send(to = {to : 'Alias1', to2 : 'Alias2'}

Giving no to argument will send an email to yourself. In that sense, yagmail.SMTP().send() can already send an email. Be aware that if no explicit to = ... is used, the first argument will be used to send to. Can be avoided like:

yag.send(subject = 'to self', contents = 'hi!')

Note that by default all email addresses are conservatively validated using soft_email_validation==True (default).

Oauth2

It is even safer to use Oauth2 for authentication, as you can revoke the rights of tokens.

This is one of the best sources, upon which the oauth2 code is heavily based.

The code:

yag = SMTP("[email protected]", oauth2_file="~/oauth2_creds.json")
yag.send(subject="Great!")

It will prompt for a google_client_id and a google_client_secret, when the file cannot be found. These variables can be obtained following the previous link.

After you provide them, a link will be shown in the terminal that you should followed to obtain a google_refresh_token. Paste this again, and you're set up!

Note that people who obtain the file can send emails, but nothing else. As soon as you notice, you can simply disable the token.

Magical contents

The contents argument will be smartly guessed. It can be passed a string (which will be turned into a list); or a list. For each object in the list:

  • If it is a dictionary it will assume the key is the content and the value is an alias (only for images currently!) e.g. {'/path/to/image.png' : 'MyPicture'}
  • It will try to see if the content (string) can be read as a file locally, e.g. '/path/to/image.png'
  • if impossible, it will check if the string is valid html e.g. <h1>This is a big title</h1>
  • if not, it must be text. e.g. 'Hi Dorika!'

Note that local files can be html (inline); everything else will be attached.

Local files require to have an extension for their content type to be inferred.

As of version 0.4.94, raw and inline have been added.

  • raw ensures a string will not receive any "magic" (inlining, html, attaching)
  • inline will make an image appear in the text.

Feedback

I'll try to respond to issues within 24 hours at Github.....

And please send me a line of feedback with SMTP().feedback('Great job!') :-)

Roadmap (and priorities)

  • Added possibility of Image
  • Optional SMTP arguments should go with **kwargs to my SMTP
  • CC/BCC (high)
  • Custom names (high)
  • Allow send to return a preview rather than to actually send
  • Just use attachments in "contents", being smart guessed (high, complex)
  • Attachments (contents) in a list so they actually define the order (medium)
  • Use lxml to see if it can parse the html (low)
  • Added tests (high)
  • Allow caching of content (low)
  • Extra other types (low) (for example, mp3 also works, let me know if something does not work)
  • Probably a naming issue with content type/default type
  • Choose inline or not somehow (high)
  • Make lxml module optional magic (high)
  • Provide automatic fallback for complex content(medium) (should work)
  • yagmail as a command on CLI upon install
  • Added feedback function on SMTP to be able to send me feedback directly :-)
  • Added the option to validate emailaddresses...
  • however, I'm unhappy with the error handling/logging of wrong emails
  • Logging count & mail capability (very low)
  • Add documentation to exception classes (low)
  • add raw and inline
  • oauth2
  • ~~Travis CI integration ~~
  • ~~ Add documentation to all functions (high, halfway) ~~
  • Prepare for official 1.0
  • Go over documentation again (medium)
  • Allow .yagmail file to contain more parameters (medium)
  • Add option to shrink images (low)

Errors

  • Make sure you have a keyring entry (see section No more password and username), or use getpass to register. I discourage to use username / password in scripts.

  • smtplib.SMTPException: SMTP AUTH extension not supported by server

  • SMTPAuthenticationError: Application-specific password required

  • YagAddressError: This means that the address was given in an invalid format. Note that From can either be a string, or a dictionary where the key is an email, and the value is an alias {'[email protected]': 'Sam'}. In the case of 'to', it can either be a string (email), a list of emails (email addresses without aliases) or a dictionary where keys are the email addresses and the values indicate the aliases.

  • YagInvalidEmailAddress: Note that this will only filter out syntax mistakes in emailaddresses. If a human would think it is probably a valid email, it will most likely pass. However, it could still very well be that the actual emailaddress has simply not be claimed by anyone (so then this function fails to devalidate).

  • Click to enable the email for being used externally https://www.google.com/settings/security/lesssecureapps

  • Make sure you have a working internet connection

  • If you get an ImportError try to install with sudo, see issue #13

Donate

If you like yagmail, feel free (no pun intended) to donate any amount you'd like :-)

PayPal

Comments
  • always prompts for keyring password on Ubuntu

    always prompts for keyring password on Ubuntu

    After registering the user and email, it prompts everytime for the encrypted keyring password. yag = yagmail.SMTP() Please enter password for encrypted keyring:

    Works fine on Mac Os

    opened by loraxman 20
  • Do I have to manually regenerate the OAuth2 credentials file every few days with GMail?

    Do I have to manually regenerate the OAuth2 credentials file every few days with GMail?

    I've started using yagmail a while ago, and after being very happy at the beginning I discovered something that seems wrong.

    After a few days of sending emails, Gmail starts to refuse to send them with the following as part of the stack trace:

    eturn get_oauth_string(user, oauth2_info)                            
    File "/usr/local/lib/p│ython3.9/site-packages/yagmail/oauth2.py", line 96, in get_oauth_string
      access_token, expires_in = refresh_authorization(**oauth2_info)
    File "/usr/local/lib/python3.9/site-packages/yagmail/oauth2.py", line 91, in refresh_authorization
      response = call_refresh_token(google_client_id, google_client_secret, google_refresh_token)
    File "/usr/local/lib/python3.9/site-packages/yagmail/oauth2.py", line 71, in call_refresh_token
     response = urlopen(request_url, encoded_params).read().decode('UTF-8')
    File "/usr/local/lib/python3.9/urllib/request.py", line 214, in urlopen 
      return opener.open(url, data, timeout)                                
    File "/usr/local/lib/python3.9/urllib/request.py", line 523, in open    
      response = meth(req, response)                                        
    File "/usr/local/lib/python3.9/urllib/request.py", line 632, in http_response
      response = self.parent.error(
    File "/usr/local/lib/python3.9/urllib/request.py", line 561, in error   
      return self._call_chain(*args)
    File "/usr/local/lib/python3.9/urllib/request.py", line 494, in _call_chain
      result = func(*args)│Ju
      File "/usr/local/lib/python3.9/urllib/request.py", line 641, in http_error_default
     raise HTTPError(req.full_url, code, msg, hdrs, fp)                    
    urllib.error.HTTPError: HTTP Error 400: Bad Request                       
    

    I've solved it once in the past by regenerating the credentials.json locally on my machine and uploading to the server. But now i stopped working again and I'm wondering: am I doing something that's obviously wrong?

    The code that I use is straightforward:

        def send_with_yagmail(self):
            yag = yagmail.SMTP(self.our_email, oauth2_file="/<path_to>/credentials.json")
            yag.send(self.to_email, self.message_subject, contents=self.message_body)
    

    and the contents of the credentials.json file also seem standard:

    {
      "email_address": "[email protected]",
      "google_client_id": "74<blabla>0e1feov.apps.googleusercontent.com",
      "google_client_secret": "GOCSP<blabla<kOz",
      "google_refresh_token": "1//09<blabla>-2_dxZH8"
    }
    
    

    Can anybody recommend something that can be done? Thanks!

    opened by mircealungu 18
  • Add support for attaching bytes objects

    Add support for attaching bytes objects

    There are two ways to attach bytes objects:

    1. Directly: I.e. attachments becomes a list of bytes objects

    2. Via a tuple (str, bytes), where the first element is the filename and the second element the file contents.

    3. was the first implementation, but I noticed that the filename + suffix was garbled and therefore not user friendly. Not sure that option should even be supported.

    For passing a tuple in 2. it was required to modify the serialize_object function to ignore tuples. Not sure, whether is a backwards incompatible change? Otherwise maybe create a dummy class, like raw or inline.

    opened by york-schlabrendorff-liqid 16
  • How to make sure messages are threaded in gmail? Reference header?

    How to make sure messages are threaded in gmail? Reference header?

    I'm sending several emails to myself with the same sender, recipients and subject, but gmail is not threading them. Each shows up as a separate email. According to gmail's docs, these should appear in the same thread. The only exception is if there is a "reference header". I'm not setting a header myself, not sure if yagmail does internally. Ref: https://gsuiteupdates.googleblog.com/2019/03/threading-changes-in-gmail-conversation-view.html

    I just noticed that there is a message id once I click "show original" in gmail, and this is probably the problem:

    Return-Path: [email protected] Received: from [192.168.0.2] (cpe-172-114-95-4.socal.res.rr.com. [172.114.5.4]) by smtp.gmail.com with ESMTPSA id p1sm982433pjp.10.2020.07.31.13.5.10 for [email protected] (version=TLS1_2 cipher=EDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 31 Jul 2020 13:15:10 -0700 (PDT) Message-ID: [email protected] Content-Type: multipart/mixed; boundary="===============221320975769819809==" MIME-Version: 1.0 Date: Fri, 31 Jul 2020 20:15:08 -0000 Subject: EOD Update From: "[email protected]" [email protected] To: [email protected]

    Is there a way to not set a message id, or set it to a specific id? I don't see any reference to message-id in the codebase.

    Thanks!

    opened by steel3d 12
  • Too few arguments?

    Too few arguments?

    I may be missing something but I can't seem to find much in the way of documentation on command line usage. I've used --help and come up with the following to send a message:

    ./yagmail -t [email protected] -s Test message -c This is the contents of my email. -u username.g

    Every time it returns error: too few arguments.

    What am I missing here?

    opened by namaneko 11
  • no module named error

    no module named error

    Hello,

    Right after installing yagmail with pip install I get this error as soon as I import the module:

    import yagmail Traceback (most recent call last): File "", line 1, in File "/usr/local/lib/python2.7/site-packages/yagmail/init.py", line 6, in from .yagmail import SMTP File "/usr/local/lib/python2.7/site-packages/yagmail/yagmail.py", line 16, in from .validate import validate_email_with_regex File "/usr/local/lib/python2.7/site-packages/yagmail/validate.py", line 31, in from yagmail.error import YagInvalidEmailAddress ImportError: No module named error

    What could this be?

    opened by martinberoiz 11
  • Fix OAuth authorization expiring

    Fix OAuth authorization expiring

    Google OAuth authorizations expire after 7 days if issued while the project was in "Testing" mode. [1]

    Maybe the authorization itself expires, i.e. every token associated with it. So you can't just fix it by refreshing earlier (using the refresh token earlier to get a new auth token). [2] It would anyway be a more complicated setup since refreshing would need to be scheduled.

    => (Google Cloud Console) projects shall use "In Production" status If your project is in status “in production”, the refresh token will last longer (indefinitely, as I understand). [3]


    Yagmail currently uses OOB auth which will not be supported in projects with "In Production" status. => Switch to a localhost redirect_uri. (which is still allowed for Desktop type clients) [4]


    Fixes #244, fixes #247


    [1] https://stackoverflow.com/a/68776672 [2] https://stackoverflow.com/a/67966982 [3] https://stackoverflow.com/questions/8953983/do-google-refresh-tokens-expire [4] https://developers.google.com/identity/protocols/oauth2/resources/oob-migration#desktop-client

    opened by xnumad 10
  • "noname" attached filenames

    When attaching filenames, gmail is showing those files as noname filename. It's happening to me today, without upgrading anything. So I don't know it's gmail related or its yagmail related. The files attached are all PDF files, and all sended files has this noname problem.

    Throwing what I'm doing to attaching files and send mails.

    line_invoice_path = PATH_TO_PDF_FILE
    contents = []
    contents.append(line_invoice_path)
    yag.send(mail_to, subject, contents)
    

    I've been using this script about more than 1 year without problems. Just today I realised attached filenames are wrong...

    opened by DaWy 10
  • Why did not the attachment support files with Chinese Name?

    Why did not the attachment support files with Chinese Name?

    I found when my attached files were with English Name, I could received the email with attachments normally. But when I changed the attached files' name with Chinese, i could received the email but without attachments. Is there any chance to support Chinese filename?

    opened by AstridWang 10
  • OAuth auth token rejected, not clear why

    OAuth auth token rejected, not clear why

    $ python -c "import yagmail; yagmail.SMTP('[redacted]@gmailcom', oauth2_file='~/.[redacted]_gmail_oauth2_creds.json').send(subject='test done', contents='test whee')"
    Your 'google_client_id': 
    Your 'google_client_secret': 
    Navigate to the following URL to auth:
    https://accounts.google.com/o/oauth2/auth?client_id=[redacted].apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fgmail.send%2F
    Enter verification code: [redacted]
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/usr/local/lib/python2.7/dist-packages/yagmail/sender.py", line 113, in send
        return self._attempt_send(addresses['recipients'], msg.as_string())
      File "/usr/local/lib/python2.7/dist-packages/yagmail/sender.py", line 119, in _attempt_send
        result = self.smtp.sendmail(self.user, recipients, msg_string)
      File "/usr/lib/python2.7/smtplib.py", line 731, in sendmail
        raise SMTPSenderRefused(code, resp, from_addr)
    smtplib.SMTPSenderRefused: (530, '5.5.1 Authentication Required. Learn more at\n5.5.1  https://support.google.com/mail/?p=WantAuthError 189sm11302089pgj.67 - gsmtp', '[redacted]@gmailcom')
    

    Following the link (and trying numerous variants with and without whitespace) didn't provide any useful information as to why the verification code was rejected. I double checked the code on the last page of the Google OAuth2 flow against the terminal and it looks fine. Not sure where to go from here.

    opened by MrCreosote 10
  • UnicodeEncodeError

    UnicodeEncodeError

    I'm not sure if this is just a py2 error, but I can't send unicode contents to yagmail

    Traceback (most recent call last):
    
    ...
      File "C:\Program Files (x86)\Anaconda2\lib\site-packages\yagmail\yagmail.py", line 107, in send
        msg = self._prepare_message(addresses, subject, contents, attachments, headers)
      File "C:\Program Files (x86)\Anaconda2\lib\site-packages\yagmail\yagmail.py", line 230, in _prepare_message
        has_included_images, content_objects = self._prepare_contents(contents)
      File "C:\Program Files (x86)\Anaconda2\lib\site-packages\yagmail\yagmail.py", line 298, in _prepare_contents
        content_object = self._get_mime_object(content)
      File "C:\Program Files (x86)\Anaconda2\lib\site-packages\yagmail\yagmail.py", line 368, in _get_mime_object
        content_name = os.path.basename(str(content_string))
    UnicodeEncodeError: 'ascii' codec can't encode character u'\xe3' in position 2: ordinal not in range(128)
    

    I tried removing the str() but then realized that the problem continues with, e.g., _prepare_message().

    opened by animismus 10
  • sending unwated attachments.

    sending unwated attachments.

    HI, im sending contents = html (it points to a variable with email template html in it. ) variable is string. it sends fine but on the end of the email are attachments which i did not specify. it is scraping my href urls(youtube, and onedrive) and doing attachments too. any way to fix this? ty

    opened by Amachik 2
  • difficulty getting oauth file with yagmail

    difficulty getting oauth file with yagmail

    Dear Github,

    I am looking forward to using yagmail, but am having a devil of a time getting authorization to work. After first trying to set my gmail account to less secure, I learned this apparently is no longer allowed and Oauth 2 is required.

    My issue is much like the one specified in this thread, . As stated in this post, https://github.com/kootenpv/yagmail/issues/143#issuecomment-1161223461, it appears that google does not supply the credential file in the correct format. But I tried a bunch of things and each had its own problem.

    • When I set up a Client ID in the Google API console, download the json as credentials.json and let the system create the token.json, things work to a point: I am brought through google to "pick an account, do you want to continue" and token is created. I am able to print labels for the gmail account. But when I issue yag.send(to='[email protected]', subject='Testing Yagmail', contents='Hurray, it worked!'), I get an error "TypeError: refresh_authorization() got an unexpected keyword argument 'token'." When I look at the token file, it does contain the key 'token' which it should not per https://github.com/kootenpv/yagmail/issues/143#issuecomment-527115298.
    • If I go into the token and edit it to reflect the the expected contents as identified in the above link by removing keys that are not specified and prefixing the names with 'google_', I get an error "ValueError: Authorized user info was not in the expected format, missing fields refresh_token, client_id, client_secret." It doesn't seem to like the 'google_' prefix.
    • editing the token file as above without the 'google_' prefix seems to get further producing a different error "An error occurred: <HttpError 403 when requesting https://gmail.googleapis.com/gmail/v1/users/me/labels?alt=json returned "Request had insufficient authentication scopes"

    I am stuck. Relatively new to Oauth2, but it seems others are able to use yagmail. Is there a trick I am missing? I am also new to Github but hope my post gives the right amount of info.

    Thanks for any assistance, Brian

    opened by kramsman 0
  • Sending the same email with different attachments to different recipients but the script stops running after 3-4 iterations every time and also the first few mails take 10-15 seconds to send each

    Sending the same email with different attachments to different recipients but the script stops running after 3-4 iterations every time and also the first few mails take 10-15 seconds to send each

    My code:

    import yagmail
    import pandas as pd
    import os
    
    data = pd.read_csv('studentscomp32.csv', header=0)
    Name = data['Name']
    Mail = data['Email']
    Course = data['Course']
    yag = yagmail.SMTP("[email protected]", "pw")
    `try:`
        for i in range(len(Name)):
            yag.send(Mail[i],"Certificate of Completion for the course "+Course[i]+" awarded to "+Name[i]," Congratulations, attached with this email is your certificate", attachments=['/home/kyez/Code/CTE Mailer/comp32/'+Name[i]+'.pdf'])
            print("Success")
    except:
        print("Fail")
    
    ```        ``
    
    opened by kdarsh17 0
  • AttributeError: partially initialized module 'yagmail' has no attribute 'SMTP' (most likely due to a circular import)

    AttributeError: partially initialized module 'yagmail' has no attribute 'SMTP' (most likely due to a circular import)

    Just installed yagmail on a fresh install of raspberry pi os and tried to run the following. I got the error above.

    import yagmail
    
    # initiating connection with SMTP server
    yag = yagmail.SMTP("*******","*******")
    # Adding Content and sending it
    yag.send("************.com","yagtest","test of Yagmail from python")
    
    opened by tjerram 1
  • Send fails with pyinstaller only when contents is added

    Send fails with pyinstaller only when contents is added

    Isolated the issue using a script with only yagmail and send.

    Crashes upon attempting to send email with anything passed to contents, even with yagmail.raw. Only affects program made with pyinstaller. Attachments and subject are fine.

    opened by JoaoieP 3
  • Sending smtp with starttls

    Sending smtp with starttls

    It works perfectly when sending emails with SSL, however, when I try to send with STARTTLS it does not work and the docs do not state how to do it.

    It would be great if the docs could be updated on SMTP sending because yagmail is the best way to send emails in python.

    opened by AugustasVol 4
Owner
Pascal van Kooten
AI / Deep learning enthusiast
Pascal van Kooten
A Django app that allows you to send email asynchronously in Django. Supports HTML email, database backed templates and logging.

Django Post Office Django Post Office is a simple app to send and manage your emails in Django. Some awesome features are: Allows you to send email as

User Inspired 856 Dec 25, 2022
Command line interface for sending email using SMTP (ships with Gmail configuration).

mailsend Description Lightweight command line interface for sending email using SMTP. Default configuration is set for Gmail (smtp.gmail.com at port 5

Keith Mathe 1 Mar 22, 2022
Bulk send personalized emails using a .csv file and Gmail API (via EZGmail)

GSender Bulk send personalized emails using a .csv file and Gmail API (via EZGmail). Installation Install requirements.txt. Follow the EZGmail Install

null 1 Nov 23, 2021
faceFarm is an active yahoo email detection script that functions to take over the facebook account using email.

faceFarm – The simple Email Detector. Email Valid Detector for Facebook (Yahoo) faceFarm is an active yahoo email detection script that functions to t

Fadjrir Herlambang 2 Jan 18, 2022
This Python program generates a random email address and password from a 2 big lists and checks the generated email.

This Python program generates a random email address and password from a 2 big lists and checks the generated email.

Killin 13 Dec 4, 2022
A Django email backend that uses a celery task for sending the email.

django-celery-email - A Celery-backed Django Email Backend A Django email backend that uses a Celery queue for out-of-band sending of the messages. Wa

Paul McLanahan 430 Dec 16, 2022
A Django email backend for Amazon's Simple Email Service

Django-SES Info: A Django email backend for Amazon's Simple Email Service Author: Harry Marr (http://github.com/hmarr, http://twitter.com/harrymarr) C

null 882 Dec 29, 2022
Djrill is an email backend and new message class for Django users that want to take advantage of the Mandrill transactional email service from MailChimp.

Djrill: Mandrill Transactional Email for Django Djrill integrates the Mandrill transactional email service into Django. PROJECT STATUS: INACTIVE As of

Brack3t 327 Oct 1, 2022
Esio_dev 3 Oct 15, 2021
GMailBomber is a form of Internet abuse which is perpetrated through the sending of massive volumes of email to a specific email address with the goal of overflowing the mailbox and overwhelming the mail server hosting the address, making it into some form of denial of service attack.

GMailBomber is a form of Internet abuse which is perpetrated through the sending of massive volumes of email to a specific email address with the goal of overflowing the mailbox and overwhelming the mail server hosting the address, making it into some form of denial of service attack.

Muneeb 5 Nov 13, 2022
Email-osint - Email OSINT tool written in python3

Email-osint - Email OSINT tool written in python3

Surtains 7 Nov 28, 2022
A django package which act as a gateway to send and receive email with amazon SES.

django-email-gateway: Introduction: A Simple Django app to easily send emails, receive inbound emails from users with different email vendors like AWS

MicroPyramid 28 Nov 9, 2022
Convert emails without attachments to pdf and send as email

Email to PDF to email This script will check an imap folder for unread emails. Any unread email that does not have an attachment will be converted to

Robert Luke 21 Nov 22, 2022
Send email notification when receiving Facebook message.

Send email notification when receiving Facebook message.

Radon Rosborough 4 May 8, 2022
check disk storage's amount and if necessary, send alert message by email

DiskStorageAmountChecker What is this script? (このスクリプトは何ですか?) This script check disk storage's available amount of specified servers and send alerting

Hajime Kurita 1 Oct 22, 2021
A functional demo of the O365 Module to send an email on an authenticated, tokenized account.

O365_email A functional demo of the O365 Module to send an email on an authenticated, tokenized account. Prep Create an app in Azure Developer's porta

null 2 Oct 14, 2022
send email & telegram message whenever an analog in is recieved

send email & telegram message whenever an analog in is recieved (so when attached to an alarm siren out it will alert via mail)

Naor Livne 2 Feb 11, 2022
Euserv_extend captcha solver + pin code(Gmail)

Euserv_extend captcha solver + pin code(Gmail)

null 19 Nov 30, 2022
A CLI client for sending text emails. (Currently only gmail supported)

emailCLI A CLI client for sending text emails. (Currently only gmail supported)

Amethist 3 Dec 17, 2021