Apprise - Push Notifications that work with just about every platform!

Overview

Apprise Logo


ap·prise / verb
To inform or tell (someone). To make one aware of something.


Apprise allows you to send a notification to almost all of the most popular notification services available to us today such as: Telegram, Discord, Slack, Amazon SNS, Gotify, etc.

  • One notification library to rule them all.
  • A common and intuitive notification syntax.
  • Supports the handling of images and attachments (to the notification services that will accept them).
  • It's incredibly lightweight.
  • Amazing response times because all messages sent asynchronously.

Developers who wish to provide a notification service no longer need to research each and every one out there. They no longer need to try to adapt to the new ones that comeout thereafter. They just need to include this one library and then they can immediately gain access to almost all of the notifications services available to us today.

System Administrators and DevOps who wish to send a notification now no longer need to find the right tool for the job. Everything is already wrapped and supported within the apprise command line tool (CLI) that ships with this product.

Paypal Follow
Discord Python Build Status CodeCov Status PyPi

Supported Notifications

The section identifies all of the services supported by this library. Check out the wiki for more information on the supported modules here.

Popular Notification Services

The table below identifies the services this tool supports and some example service urls you need to use in order to take advantage of it. Click on any of the services listed below to get more details on how you can configure Apprise to access them.

Notification Service Service ID Default Port Example Syntax
Apprise API apprise:// or apprises:// (TCP) 80 or 443 apprise://hostname/Token
AWS SES ses:// (TCP) 443 ses://[email protected]/AccessKeyID/AccessSecretKey/RegionName
ses://[email protected]/AccessKeyID/AccessSecretKey/RegionName/email1/email2/emailN
Boxcar boxcar:// (TCP) 443 boxcar://hostname
boxcar://hostname/@tag
boxcar://hostname/device_token
boxcar://hostname/device_token1/device_token2/device_tokenN
boxcar://hostname/@tag/@tag2/device_token
Discord discord:// (TCP) 443 discord://webhook_id/webhook_token
discord://[email protected]_id/webhook_token
Emby emby:// or embys:// (TCP) 8096 emby://[email protected]/
emby://user:[email protected]
Enigma2 enigma2:// or enigma2s:// (TCP) 80 or 443 enigma2://hostname
Faast faast:// (TCP) 443 faast://authorizationtoken
FCM fcm:// (TCP) 443 fcm://[email protected]/DEVICE_ID
fcm://[email protected]/#TOPIC
fcm://[email protected]/DEVICE_ID1/#topic1/#topic2/DEVICE_ID2/
Flock flock:// (TCP) 443 flock://token
flock://[email protected]
flock://app_token/u:userid
flock://app_token/g:channel_id
flock://app_token/u:userid/g:channel_id
Gitter gitter:// (TCP) 443 gitter://token/room
gitter://token/room1/room2/roomN
Google Chat gchat:// (TCP) 443 gchat://workspace/key/token
Gotify gotify:// or gotifys:// (TCP) 80 or 443 gotify://hostname/token
gotifys://hostname/token?priority=high
Growl growl:// (UDP) 23053 growl://hostname
growl://hostname:portno
growl://[email protected]
growl://[email protected]:port
Note: you can also use the get parameter version which can allow the growl request to behave using the older v1.x protocol. An example would look like: growl://hostname?version=1
Home Assistant hassio:// or hassios:// (TCP) 8123 or 443 hassio://hostname/accesstoken
hassio://[email protected]/accesstoken
hassio://user:[email protected]:port/accesstoken
hassio://hostname/optional/path/accesstoken
IFTTT ifttt:// (TCP) 443 ifttt://webhooksID/Event
ifttt://webhooksID/Event1/Event2/EventN
ifttt://webhooksID/Event1/?+Key=Value
ifttt://webhooksID/Event1/?-Key=value1
Join join:// (TCP) 443 join://apikey/device
join://apikey/device1/device2/deviceN/
join://apikey/group
join://apikey/groupA/groupB/groupN
join://apikey/DeviceA/groupA/groupN/DeviceN/
KODI kodi:// or kodis:// (TCP) 8080 or 443 kodi://hostname
kodi://[email protected]
kodi://user:[email protected]:port
Kumulos kumulos:// (TCP) 443 kumulos://apikey/serverkey
LaMetric Time lametric:// (TCP) 443 lametric://[email protected]_ipaddr
lametric://[email protected]:port
lametric://[email protected]_secret
Mailgun mailgun:// (TCP) 443 mailgun://[email protected]/apikey
mailgun://[email protected]/apikey/email
mailgun://[email protected]/apikey/email1/email2/emailN
mailgun://[email protected]/apikey/?name="From%20User"
Matrix matrix:// or matrixs:// (TCP) 80 or 443 matrix://hostname
matrix://[email protected]
matrixs://user:[email protected]:port/#room_alias
matrixs://user:[email protected]:port/!room_id
matrixs://user:[email protected]:port/#room_alias/!room_id/#room2
matrixs://[email protected]:port/?webhook=matrix
matrix://user:[email protected]/?webhook=slack&format=markdown
Mattermost mmost:// or mmosts:// (TCP) 8065 mmost://hostname/authkey
mmost://hostname:80/authkey
mmost://[email protected]:80/authkey
mmost://hostname/authkey?channel=channel
mmosts://hostname/authkey
mmosts://[email protected]/authkey
Microsoft Teams msteams:// (TCP) 443 msteams://TokenA/TokenB/TokenC/
MQTT mqtt:// or mqtts:// (TCP) 1883 or 8883 mqtt://hostname/topic
mqtt://[email protected]/topic
mqtts://user:[email protected]:9883/topic
Nextcloud ncloud:// or nclouds:// (TCP) 80 or 443 ncloud://adminuser:[email protected]/User
nclouds://adminuser:[email protected]/User1/User2/UserN
Notica notica:// (TCP) 443 notica://Token/
Notifico notifico:// (TCP) 443 notifico://ProjectID/MessageHook/
Office 365 o365:// (TCP) 443 o365://TenantID:AccountEmail/ClientID/ClientSecret
o365://TenantID:AccountEmail/ClientID/ClientSecret/TargetEmail
o365://TenantID:AccountEmail/ClientID/ClientSecret/TargetEmail1/TargetEmail2/TargetEmailN
OneSignal onesignal:// (TCP) 443 onesignal://[email protected]/PlayerID
onesignal://TemplateID:[email protected]/UserID
onesignal://[email protected]/#IncludeSegment
onesignal://[email protected]/Email
Opsgenie opsgenie:// (TCP) 443 opsgenie://APIKey
opsgenie://APIKey/UserID
opsgenie://APIKey/#Team
opsgenie://APIKey/*Schedule
opsgenie://APIKey/^Escalation
ParsePlatform parsep:// or parseps:// (TCP) 80 or 443 parsep://AppID:[email protected]
parseps://AppID:[email protected]
PopcornNotify popcorn:// (TCP) 443 popcorn://ApiKey/ToPhoneNo
popcorn://ApiKey/ToPhoneNo1/ToPhoneNo2/ToPhoneNoN/
popcorn://ApiKey/ToEmail
popcorn://ApiKey/ToEmail1/ToEmail2/ToEmailN/
popcorn://ApiKey/ToPhoneNo1/ToEmail1/ToPhoneNoN/ToEmailN
Prowl prowl:// (TCP) 443 prowl://apikey
prowl://apikey/providerkey
PushBullet pbul:// (TCP) 443 pbul://accesstoken
pbul://accesstoken/#channel
pbul://accesstoken/A_DEVICE_ID
pbul://accesstoken/[email protected]
pbul://accesstoken/#channel/#channel2/[email protected]/DEVICE
Pushjet pjet:// or pjets:// (TCP) 80 or 443 pjet://hostname/secret
pjet://hostname:port/secret
pjets://[email protected]/secret
pjets://hostname:port/secret
Push (Techulus) push:// (TCP) 443 push://apikey/
Pushed pushed:// (TCP) 443 pushed://appkey/appsecret/
pushed://appkey/appsecret/#ChannelAlias
pushed://appkey/appsecret/#ChannelAlias1/#ChannelAlias2/#ChannelAliasN
pushed://appkey/appsecret/@UserPushedID
pushed://appkey/appsecret/@UserPushedID1/@UserPushedID2/@UserPushedIDN
Pushover pover:// (TCP) 443 pover://[email protected]
pover://[email protected]/DEVICE
pover://[email protected]/DEVICE1/DEVICE2/DEVICEN
Note: you must specify both your user_id and token
PushSafer psafer:// or psafers:// (TCP) 80 or 443 psafer://privatekey
psafers://privatekey/DEVICE
psafer://privatekey/DEVICE1/DEVICE2/DEVICEN
Reddit reddit:// (TCP) 443 reddit://user:[email protected]_id/app_secret/subreddit
reddit://user:[email protected]_id/app_secret/sub1/sub2/subN
Rocket.Chat rocket:// or rockets:// (TCP) 80 or 443 rocket://user:[email protected]/RoomID/Channel
rockets://user:[email protected]:443/#Channel1/#Channel1/RoomID
rocket://user:[email protected]/#Channel
rocket://[email protected]
rockets://[email protected]/@User/#Channel
Ryver ryver:// (TCP) 443 ryver://Organization/Token
ryver://[email protected]/Token
SendGrid sendgrid:// (TCP) 443 sendgrid://APIToken:FromEmail/
sendgrid://APIToken:FromEmail/ToEmail
sendgrid://APIToken:FromEmail/ToEmail1/ToEmail2/ToEmailN/
ServerChan serverchan:// (TCP) 443 serverchan://token/
SimplePush spush:// (TCP) 443 spush://apikey
spush://salt:[email protected]
spush://apikey?event=Apprise
Slack slack:// (TCP) 443 slack://TokenA/TokenB/TokenC/
slack://TokenA/TokenB/TokenC/Channel
slack://[email protected]/TokenB/TokenC/Channel
slack://[email protected]/TokenB/TokenC/Channel1/Channel2/ChannelN
SMTP2Go smtp2go:// (TCP) 443 smtp2go://[email protected]/apikey
smtp2go://[email protected]/apikey/email
smtp2go://[email protected]/apikey/email1/email2/emailN
smtp2go://[email protected]/apikey/?name="From%20User"
Streamlabs strmlabs:// (TCP) 443 strmlabs://AccessToken/
strmlabs://AccessToken/?name=name&identifier=identifier&amount=0&currency=USD
SparkPost sparkpost:// (TCP) 443 sparkpost://[email protected]/apikey
sparkpost://[email protected]/apikey/email
sparkpost://[email protected]/apikey/email1/email2/emailN
sparkpost://[email protected]/apikey/?name="From%20User"
Spontit spontit:// (TCP) 443 spontit://[email protected]/
spontit://[email protected]/Channel
spontit://[email protected]/Channel1/Channel2/ChannelN
Syslog syslog:// (UDP) 514 (if hostname specified) syslog://
syslog://Facility
syslog://hostname
syslog://hostname/Facility
Telegram tgram:// (TCP) 443 tgram://bottoken/ChatID
tgram://bottoken/ChatID1/ChatID2/ChatIDN
Twitter twitter:// (TCP) 443 twitter://CKey/CSecret/AKey/ASecret
twitter://[email protected]/CSecret/AKey/ASecret
twitter://CKey/CSecret/AKey/ASecret/User1/User2/User2
twitter://CKey/CSecret/AKey/ASecret?mode=tweet
Twist twist:// (TCP) 443 twist://pasword:login
twist://password:login/#channel
twist://password:login/#team:channel
twist://password:login/#team:channel1/channel2/#team3:channel
XBMC xbmc:// or xbmcs:// (TCP) 8080 or 443 xbmc://hostname
xbmc://[email protected]
xbmc://user:[email protected]:port
XMPP xmpp:// or xmpps:// (TCP) 5222 or 5223 xmpp://user:[email protected]
xmpps://user:[email protected]:[email protected]/resource
xmpps://user:[email protected]/[email protected], [email protected]/resource
Webex Teams (Cisco) wxteams:// (TCP) 443 wxteams://Token
Zulip Chat zulip:// (TCP) 443 zulip://[email protected]/Token
zulip://[email protected]/Token/Stream
zulip://[email protected]/Token/Email

SMS Notification Support

Notification Service Service ID Default Port Example Syntax
AWS SNS sns:// (TCP) 443 sns://AccessKeyID/AccessSecretKey/RegionName/+PhoneNo
sns://AccessKeyID/AccessSecretKey/RegionName/+PhoneNo1/+PhoneNo2/+PhoneNoN
sns://AccessKeyID/AccessSecretKey/RegionName/Topic
sns://AccessKeyID/AccessSecretKey/RegionName/Topic1/Topic2/TopicN
ClickSend clicksend:// (TCP) 443 clicksend://user:[email protected]
clicksend://user:[email protected]/ToPhoneNo2/ToPhoneNoN
D7 Networks d7sms:// (TCP) 443 d7sms://user:[email protected]
d7sms://user:[email protected]/ToPhoneNo2/ToPhoneNoN
DingTalk dingtalk:// (TCP) 443 dingtalk://token/
dingtalk://token/ToPhoneNo
dingtalk://token/ToPhoneNo1/ToPhoneNo2/ToPhoneNo1/
Kavenegar kavenegar:// (TCP) 443 kavenegar://ApiKey/ToPhoneNo
kavenegar://[email protected]/ToPhoneNo
kavenegar://ApiKey/ToPhoneNo1/ToPhoneNo2/ToPhoneNoN
MessageBird msgbird:// (TCP) 443 msgbird://ApiKey/FromPhoneNo
msgbird://ApiKey/FromPhoneNo/ToPhoneNo
msgbird://ApiKey/FromPhoneNo/ToPhoneNo1/ToPhoneNo2/ToPhoneNoN/
MSG91 msg91:// (TCP) 443 msg91://AuthKey/ToPhoneNo
msg91://[email protected]/ToPhoneNo
msg91://AuthKey/ToPhoneNo1/ToPhoneNo2/ToPhoneNoN/
Nexmo nexmo:// (TCP) 443 nexmo://ApiKey:[email protected]
nexmo://ApiKey:[email protected]/ToPhoneNo
nexmo://ApiKey:[email protected]/ToPhoneNo1/ToPhoneNo2/ToPhoneNoN/
Sinch sinch:// (TCP) 443 sinch://ServicePlanId:[email protected]
sinch://ServicePlanId:[email protected]/ToPhoneNo
sinch://ServicePlanId:[email protected]/ToPhoneNo1/ToPhoneNo2/ToPhoneNoN/
sinch://ServicePlanId:[email protected]/ToPhoneNo
sinch://ServicePlanId:[email protected]/ToPhoneNo1/ToPhoneNo2/ToPhoneNoN/
Twilio twilio:// (TCP) 443 twilio://AccountSid:[email protected]
twilio://AccountSid:[email protected]/ToPhoneNo
twilio://AccountSid:[email protected]/ToPhoneNo1/ToPhoneNo2/ToPhoneNoN/
twilio://AccountSid:[email protected]/ToPhoneNo?apikey=Key
twilio://AccountSid:[email protected]/ToPhoneNo
twilio://AccountSid:[email protected]/ToPhoneNo1/ToPhoneNo2/ToPhoneNoN/

Desktop Notification Support

Notification Service Service ID Default Port Example Syntax
Linux DBus Notifications dbus://
qt://
glib://
kde://
n/a dbus://
qt://
glib://
kde://
Linux Gnome Notifications gnome:// n/a gnome://
MacOS X Notifications macosx:// n/a macosx://
Windows Notifications windows:// n/a windows://

Email Support

Service ID Default Port Example Syntax
mailto:// (TCP) 25 mailto://userid:[email protected]
mailto://domain.com?user=userid&pass=password
mailto://domain.com:2525?user=userid&pass=password
mailto://[email protected]&pass=password
mailto://mySendingUsername:[email protected]?to=[email protected]
mailto://userid:[email protected]?smtp=mail.example.com&from=[email protected]&name=no%20reply
mailtos:// (TCP) 587 mailtos://userid:[email protected]
mailtos://domain.com?user=userid&pass=password
mailtos://domain.com:465?user=userid&pass=password
mailtos://[email protected]&pass=password
mailtos://mySendingUsername:[email protected]?to=[email protected]
mailtos://userid:[email protected]?smtp=mail.example.com&from=[email protected]&name=no%20reply

Apprise have some email services built right into it (such as yahoo, fastmail, hotmail, gmail, etc) that greatly simplify the mailto:// service. See more details here.

Custom Notifications

Post Method Service ID Default Port Example Syntax
JSON json:// or jsons:// (TCP) 80 or 443 json://hostname
json://[email protected]
json://user:[email protected]:port
json://hostname/a/path/to/post/to
XML xml:// or xmls:// (TCP) 80 or 443 xml://hostname
xml://[email protected]
xml://user:[email protected]:port
xml://hostname/a/path/to/post/to

Installation

The easiest way is to install this package is from pypi:

pip install apprise

Command Line

A small command line tool is also provided with this package called apprise. If you know the server url's you wish to notify, you can simply provide them all on the command line and send your notifications that way:

# Send a notification to as many servers as you want
# as you can easily chain one after another (the -vv provides some
# additional verbosity to help let you know what is going on):
apprise -vv -t 'my title' -b 'my notification body' \
   'mailto://myemail:[email protected]' \
   'pbul://o.gn5kj6nfhv736I7jC3cj3QLRiyhgl98b'

# If you don't specify a --body (-b) then stdin is used allowing
# you to use the tool as part of your every day administration:
cat /proc/cpuinfo | apprise -vv -t 'cpu info' \
   'mailto://myemail:[email protected]'

# The title field is totally optional
uptime | apprise -vv \
   'discord:///4174216298/JHMHI8qBe7bk2ZwO5U711o3dV_js'

Configuration Files

No one wants to put their credentials out for everyone to see on the command line. No problem apprise also supports configuration files. It can handle both a specific YAML format or a very simple TEXT format. You can also pull these configuration files via an HTTP query too! You can read more about the expected structure of the configuration files here.

# By default if no url or configuration is specified aprise will attempt to load
# configuration files (if present):
#  ~/.apprise
#  ~/.apprise.yml
#  ~/.config/apprise
#  ~/.config/apprise.yml

# Windows users can store their default configuration files here:
#  %APPDATA%/Apprise/apprise
#  %APPDATA%/Apprise/apprise.yml
#  %LOCALAPPDATA%/Apprise/apprise
#  %LOCALAPPDATA%/Apprise/apprise.yml

# If you loaded one of those files, your command line gets really easy:
apprise -vv -t 'my title' -b 'my notification body'

# If you want to deviate from the default paths or specify more than one,
# just specify them using the --config switch:
apprise -vv -t 'my title' -b 'my notification body' \
   --config=/path/to/my/config.yml

# Got lots of configuration locations? No problem, you can specify them all:
# Apprise can even fetch the configuration from over a network!
apprise -vv -t 'my title' -b 'my notification body' \
   --config=/path/to/my/config.yml \
   --config=https://localhost/my/apprise/config

Attaching Files

Apprise also supports file attachments too! Specify as many attachments to a notification as you want.

# Send a funny image you found on the internet to a colleague:
apprise -vv --title 'Agile Joke' \
        --body 'Did you see this one yet?' \
        --attach https://i.redd.it/my2t4d2fx0u31.jpg \
        'mailto://myemail:[email protected]'

# Easily send an update from a critical server to your dev team
apprise -vv --title 'system crash' \
        --body 'I do not think Jim fixed the bug; see attached...' \
        --attach /var/log/myprogram.log \
        --attach /var/debug/core.2345 \
        --tag devteam

Developers

To send a notification from within your python application, just do the following:

import apprise

# Create an Apprise instance
apobj = apprise.Apprise()

# Add all of the notification services by their server url.
# A sample email notification:
apobj.add('mailto://myuserid:[email protected]')

# A sample pushbullet notification
apobj.add('pbul://o.gn5kj6nfhv736I7jC3cj3QLRiyhgl98b')

# Then notify these services any time you desire. The below would
# notify all of the services loaded into our Apprise object.
apobj.notify(
    body='what a great notification service!',
    title='my notification title',
)

Configuration Files

Developers need access to configuration files too. The good news is their use just involves declaring another object (called AppriseConfig) that the Apprise object can ingest. You can also freely mix and match config and notification entries as often as you wish! You can read more about the expected structure of the configuration files here.

import apprise

# Create an Apprise instance
apobj = apprise.Apprise()

# Create an Config instance
config = apprise.AppriseConfig()

# Add a configuration source:
config.add('/path/to/my/config.yml')

# Add another...
config.add('https://myserver:8080/path/to/config')

# Make sure to add our config into our apprise object
apobj.add(config)

# You can mix and match; add an entry directly if you want too
# In this entry we associate the 'admin' tag with our notification
apobj.add('mailto://myuser:[email protected]', tag='admin')

# Then notify these services any time you desire. The below would
# notify all of the services that have not been bound to any specific
# tag.
apobj.notify(
    body='what a great notification service!',
    title='my notification title',
)

# Tagging allows you to specifically target only specific notification
# services you've loaded:
apobj.notify(
    body='send a notification to our admin group',
    title='Attention Admins',
    # notify any services tagged with the 'admin' tag
    tag='admin',
)

# If you want to notify absolutely everything (reguardless of whether
# it's been tagged or not), just use the reserved tag of 'all':
apobj.notify(
    body='send a notification to our admin group',
    title='Attention Admins',
    # notify absolutely everything loaded, reguardless on wether
    # it has a tag associated with it or not:
    tag='all',
)

Attaching Files

Attachments are very easy to send using the Apprise API:

import apprise

# Create an Apprise instance
apobj = apprise.Apprise()

# Add at least one service you want to notify
apobj.add('mailto://myuser:[email protected]')

# Then send your attachment.
apobj.notify(
    title='A great photo of our family',
    body='The flash caused Jane to close her eyes! hah! :)',
    attach='/local/path/to/my/DSC_003.jpg',
)

# Send a web based attachment too! In the below example, we connect to a home
# security camera and send a live image to an email. By default remote web
# content is cached but for a security camera, we might want to call notify
# again later in our code so we want our last image retrieved to expire(in
# this case after 3 seconds).
apobj.notify(
    title='Latest security image',
    attach='http:/admin:passwo[email protected]/ISAPI/Streaming/channels/101/picture?cache=3'
)

To send more than one attachment, just use a list, set, or tuple instead:

import apprise

# Create an Apprise instance
apobj = apprise.Apprise()

# Add at least one service you want to notify
apobj.add('mailto://myuser:[email protected]')

# Now add all of the entries we're intrested in:
attach = (
    # ?name= allows us to rename the actual jpeg as found on the site
    # to be another name when sent to our receipient(s)
    'https://i.redd.it/my2t4d2fx0u31.jpg?name=FlyingToMars.jpg',

    # Now add another:
    '/path/to/funny/joke.gif',
)

# Send your multiple attachments with a single notify call:
apobj.notify(
    title='Some good jokes.',
    body='Hey guys, check out these!',
    attach=attach,
)

Want To Learn More?

If you're interested in reading more about this and other methods on how to customize your own notifications, please check out the following links:

Want to help make Apprise better?

Comments
  • do we have O365 support ? if yes can we use OAUTH ?

    do we have O365 support ? if yes can we use OAUTH ?

    Thanks for such a nice python library.

    it works perfectly for SMTP with TLS using gmail.

    I have 2 Queries here :

    1. I am trying to send notification using O365 smtp.office365.com. will it work ? i couldnt see any help for Office365 Mail.
    2. if O365 support is available, is it possible to use OAUTH. because Microsoft Basic Auth will end on Oct 13 ,2020. https://techcommunity.microsoft.com/t5/exchange-team-blog/upcoming-changes-to-exchange-web-services-ews-api-for-office-365/ba-p/608055

    My CLI command is : apprise -vvvv -t "Title" -b "Body" mailtos://{USER}:{PASSWORD}@{DOMAIN}?smtp=smtp.office365.com

    Output is : 2020-04-03 10:01:44,667 - DEBUG - Delivery: smtp.office365.com:587 2020-04-03 10:01:44,667 - DEBUG - Connecting to remote SMTP server... 2020-04-03 10:01:45,739 - DEBUG - Securing connection with STARTTLS... 2020-04-03 10:01:46,071 - DEBUG - Applying user credentials... 2020-04-03 10:01:51,182 - WARNING - A Connection error occured sending Email notification to smtp.office365.com. 2020-04-03 10:01:51,182 - DEBUG - Socket Exception: (535, b'5.7.3 Authentication unsuccessful [{MY DOMAIN NAME}]')

    enhancement Investigating 
    opened by ponmuthu 47
  • Notify to Lametric Time

    Notify to Lametric Time

    :bulb: The Idea I have a Lametric Time and I'd like to be able to send notifications to it! There's a Python library here which may be able to streamline this feature.

    https://github.com/keans/lmnotify

    :hammer: Breaking Feature Nope, additional notification group

    enhancement 
    opened by poblabs 31
  • Error

    Error "Failed to send to Slack: error=200", but notification arrives

    :mega: Notification Service(s) Impacted Slack

    :beetle: Describe the bug When using the Apprise CLI v0.8.3 to notify a Slack channel with the method "incoming web hook", apprise exits with exit code 1, but the notification is delivered.

    When using verbose mode -vvv, the following lines shows up in the log:

    2020-01-17 22:42:59,617 - WARNING - Failed to send to Slack: error=200.
    2020-01-17 22:42:59,617 - DEBUG - Response Details:
    ok
    

    The Slack-URL I'm using has the following format:

    slack://[email protected]/xxx/xxx/#channelname

    :computer: Your System Details: Tested on two systems:

    • OS: MacOS 10.15.2 (Catalina) and Ubuntu-latest
    • Python 2.7.16 (MacOS) and 3.7 (Ubuntu)

    :crystal_ball: Additional context

    • Not tested with the bot method.
    • This problem didn't show up in version 0.7.8, the previous one I had.
    • It shows up in my logs starting end of November, might have been introduced in 0.8.2.
    • Tested also the Pushover service, this works flawlessly on both machines.
    bug 
    opened by cstuder 28
  • Add support for recent CPython and PyPy versions, drop support for Python 2

    Add support for recent CPython and PyPy versions, drop support for Python 2

    Dear Chris,

    following up on https://github.com/caronc/apprise/pull/679#issuecomment-1270711310, this patch aims to drop support for CPython 2, PyPy 2 and PyPy 3.5, and add support for PyPy 3.6 - 3.9. While being at it, it also adds support for CPython 3.10. The new Python version labels for Travis CI have been picked from the corresponding documentation at ^1.

    With kind regards, Andreas.

    opened by amotl 27
  • Reddit not working

    Reddit not working

    :mega: Reddit

    :lady_beetle: Fails to accept notification

    :bulb: apprise -vv -t "Test Message Title" -b "Test Message Body" reddit://MattPackwood:[email protected]/RECATED

    2021-12-16 16:51:19,420 - WARNING - An invalid Reddit App Secret (RfREDACTEDV_uREDACTEDA) was specified 2021-12-16 16:51:19,420 - ERROR - Could not load Reddit URL: reddit://MattPackwood:[email protected]/R...A 2021-12-16 16:51:19,420 - ERROR - You must specify at least one server URL or populated configuration file. Usage: [OPTIONS] SERVER_URL [SERVER_URL2 [SERVER_URL3]]

    :computer: macOS 12.1 (21C52)

    :crystal_ball: Awesome software! All sorts of applciations!

    bug 
    opened by mattpackwood 26
  • add ntfy plugin

    add ntfy plugin

    Add a plugin for the Ntfy notification service.

    Description:

    Related issue (if applicable): #520

    New Service Completion Status

    • [x] apprise/plugins/NotifyNtfy.py
    • [x] setup.py
      • add new service into the keywords section of the setup() declaration
    • [x] README.md
      • add entry for new service to table (as a quick reference)
    • [x] packaging/redhat/python-apprise.spec
      • add new service into the %global common_description

    Checklist

    • [x] The code change is tested and works locally.
    • [x] There is no commented out code in this PR.
    • [x] No lint errors (use flake8)
    • [x] 100% test coverage
    opened by particledecay 23
  • Ability to change user avatar in Discord notifications

    Ability to change user avatar in Discord notifications

    :bulb: The Idea Ability to change user avatar in Discord notifications for visual changes for custom alerts instead of the apprise logo on every discord alert

    enhancement 
    opened by poblabs 22
  • Request for support for Signal

    Request for support for Signal

    :loudspeaker: What is the name of the service? Signal

    :link: Provide some details about the service that can help with it's development.

    • Homepage: https://signal.org/
    • API Reference: https://github.com/signalapp/Signal-Server/wiki/API-Protocol

    :bulb: Anything else? I found some other projects that appear to be able to do this:

    • https://github.com/signalapp/libsignal-service-java
    • https://github.com/AsamK/signal-cli
    • https://gitlab.com/thefinn93/signald
    enhancement 
    opened by TheFiZi 22
  • Apprise Form Post Issue

    Apprise Form Post Issue

    I want AppRise to navigate to http://192.168.1.54:5000/command?message=test

    When I try to do this using the form custom feature, it adds a front slash (/) after 'command' and enters %3A before 'message' in the resulting URL. This doesn't work for my purposes. See below for the debug messages. Is there a workaround?

    apprise -vvv 'form://192.168.1.54:5000/command?:message=test&method=get' 2022-01-15 03:49:19,420 - DEBUG - Loaded Form URL: form://192.168.1.54:5000/command/?method=GET&format=text&overflow=upstream&rto=4.0&cto=4.0&verify=yes&%3Amessage=test

    bug 
    opened by lightc786 21
  • Apprise CLI does not detect and/or source default configuration files

    Apprise CLI does not detect and/or source default configuration files

    I am trying to use apprise on a Raspberry Pi to send notices to my Macbook. I get the following response:

    apprise --verbose --body "Test message" growl://[email protected] 
    Invalid response: ('400', 'There was an error parsing the key for validity')
    2019-04-10 03:26:59,685 - WARNING - A Connection error occured sending Growl notification to 192.168.2.117.
    

    Looking at the Growl Preferences under the IP for the Pi I do see Apprise listed as an application and it is enabled with default settings. The Growl version is 2.1.3. Apprise is just installed for python3 at v0.7.5

    I am able to send to this system from another Mac using growlnotify.

    Any assistance would be appreciated.

    One other anomaly: it doesn't seem to recognize either ~/.config/apprise or ~/.apprise as the config files. I have a single line in those files consisting of the URL shown above.

    bug 
    opened by ctgreybeard 21
  • How to send public tweets with image attached?

    How to send public tweets with image attached?

    :question: Question I'm in the process converting my app, that currently uses twurl to send out tweets like this, into using apprise because of its broad support for notification channels. My tweets are public, have a body text and attach an image. I obviously already have Twitter creds to be able to do this.

    Currently, using twurl, this is a 2 step process (see example in bash script below) that works reliably:

    • first upload the image and receive a json object that contains an Media ID
    • then send a tweet with body text that references the Media ID
    # upload the image and get a Media ID:
    TW_MEDIA_ID=$(twurl -X POST -H upload.twitter.com "/1.1/media/upload.json" -f /tmp/snapshot.png -F media | sed -n 's/.*\"media_id\":\([0-9]*\).*/\1/p')
    # Send a tweet and reference the Media ID to be used
    LINK=$(echo `twurl -r "status=$TWEETTEXT&media_ids=$TW_MEDIA_ID" /1.1/statuses/update.json` | tee -a /tmp/tweets.log | jq '.entities."urls" | .[] | .url' | tr -d '\"')
    # LINK now contains the URL of the tweet
    

    Switching to apprise, I an able to successfully send tweets without images and I'm grateful to no longer have to make my body text html-safe:

    apprise -b "$TWEETTEXT" twitter://$TWITTER_CONSKEY/$TWITTER_CONSSECRET/$TWITTER_ACCTOKEN/$TWITTER_ACCSECRET/?mode=tweet
    

    Attempt 1: I tried adding the media ID and body in a single request using apprise: didn't work

    apprise -a file:///tmp/snapshot.png -b "$TWEET" twitter://$TWITTER_CONSKEY/$TWITTER_CONSSECRET/$TWITTER_ACCTOKEN/$TWITTER_ACCSECRET/?mode=tweet
    

    Attempt 2: I tried to upload the file attachment without body, and apprise complained of not having any text in the body

    apprise -a file:///tmp/snapshot.png twitter://$TWITTER_CONSKEY/$TWITTER_CONSSECRET/$TWITTER_ACCTOKEN/$TWITTER_ACCSECRET/?mode=tweet 
    

    Could someone help me with an example (command line would be fine) of how to do what I want? Generally, there's a single PNG image that I have available as a file, and the text is curated to be of proper size for public tweeting.

    Once I'm done with Twitter, my next target is Discord using a Webhook. Hopefully the Twitter answer will be analogous to what I need to do for Discord.

    Thanks!

    enhancement 
    opened by kx1t 19
  • MQTT Retain Flag

    MQTT Retain Flag

    :bulb: The Idea Would it be possible to add a retain flag to the MQTT notification?

    It would be handy to see what the last notification was before a reboot or close of subscription for any reason. I suppose QOS could be done at the same time if you're in the code, but the retain flag would be a nice addition.

    enhancement 
    opened by lloydbayley 0
  • Configuration UI is not loading correctly

    Configuration UI is not loading correctly

    :mega: Notification Service(s) Impacted Configuration UI

    :lady_beetle: Describe the bug The additional resources (CSS, JS, images) are not loaded on the Configuration UI. The browser and also the container log states, that the resources are not found. The app is using "/s" folder for the resources (example: https://[mydomain]/s/css/highlight.min.css). The correct files are present in the container in the /opt/apprise/webapp/static folder. It seems, that some kind of folder mapping is missing or the doc root is not set for the /s (/s -> /opt/apprise/webapp/static).

    :bulb: Screenshots and Logs image image image

    :computer: Your System Details:

    • Latest container from hub.docker.com -> caronc/apprise:latest

    :crystal_ball: Additional context

    • CloudFlare is used as DNS server
    • nginx-proxy is used as reverse proxy
    bug 
    opened by attilabalazsy 2
  • Amazon SNS Subject support

    Amazon SNS Subject support

    Description:

    Related issue (if applicable): n/a

    Added support for Amazon SNS to handle Subjects as titles where the target is an SNS Topic, rather than phone number for an SMS message.

    Increased the title_maxlen to the limit for the Amazon SNS where used for topics. Extended the logic to ensure backwards compatibility, so that the title is still added to the SMS messages, and retained in the body of messages sent to a Topic as well. Newer versions will still produce the same as the original output, with the sole exception being that the title will be used as the Subject for any email endpoints in topics. SMS endpoints within topics also behave as expected, with no change.

    Minor update to AWS_HTTP_ERROR_MAP to cover insufficient IAM permissions, specifically that sns:CreateTopic is also needed along with sns:Publish

    Checklist

    • [x] The code change is tested and works locally.
    • [x] There is no commented out code in this PR.
    • [x] No lint errors (use flake8)
    • [x] 100% test coverage

    Testing

    Anyone can help test this source code as follows:

    # Create a virtual environment to work in as follows:
    python3 -m venv apprise
    
    # Change into our new directory
    cd apprise
    
    # Activate our virtual environment
    source bin/activate
    
    # Install the branch
    pip install git+https://github.com/caronc/[email protected]
    
    # Test out the changes with the following commands:
    
    # 1. SNS Topic - Title and Body
    ./bin/apprise -vv -t "Testing the Title" -b "Body Test" sns://AccessKeyID/AccessSecretKey/RegionName/Topic
    
    # 2. SMS Message - Title and Body
    ./bin/apprise -vv -t "Testing the Title" -b "Body Test" sns://AccessKeyID/AccessSecretKey/RegionName/+PhoneNo
    
    # 3. SNS Topic - Body Only
    ./bin/apprise -vv -b "Body Test" sns://AccessKeyID/AccessSecretKey/RegionName/Topic
    
    # 4. SMS Message - Body Only
    ./bin/apprise -vv -b "Body Test" sns://AccessKeyID/AccessSecretKey/RegionName/+PhoneNo
    
    # 5. Error message - Should fail and proceduce error using ineffective access key
    ./bin/apprise -vv -b "Body Test" sns://AKIA0000000000000000/A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0A0/us-east-1/doesntexisttopic
    
    
    opened by ssennettau 2
  • RingCentral Support

    RingCentral Support

    :loudspeaker: What is the name of the service? RingCentral MVP

    :link: Provide some details about the service that can help with it's development.

    • Homepage: https://www.ringcentral.com/
    • API Reference: https://developers.ringcentral.com/

    :bulb: Anything else?

    Ringcentral MVP APIs have support for team messaging, calls, sms and fax (if anybody fancies that)

    enhancement 
    opened by mark05e 0
  • Matrix Overhaul

    Matrix Overhaul

    :bulb: The Updates

    There have been a lot of Matrix requests that have come in. Matrix is amazing and it's open source feature is loved! Unfortunately it's API/interaction is not very well documented, but it is always improving here.

    The outstanding Matrix Issues/Requests open are:

    • [ ] #305
      • The big blocker on this is the research and lack of documentation on the encryption portion on file attachments.
    • [ ] #356
      • The big blocker on this is the research and lack of documentation on the encryption portion on file attachments.
    • [ ] #794
      • General Research needed here

    :gear: Other Requests

    • [ ] In the case of not providing room_id/room_alias, do not broadcast the message to every channel/user. source
    enhancement 
    opened by caronc 0
  • Allow to send notification to a matrix user

    Allow to send notification to a matrix user

    :bulb: The Idea

    I am using Apprise currently with Gotify to send myself notifications. This works fine, thanks again for this nice tool!

    I am also using my own instance of Synapse/Matrix and thought I could replace Gotify by receiving the notifications on Matrix directly.

    So I would like to send the notifications directly to me, not broadcast it to a channel (or all channels, like when I misread the note regarding the missing room_id/room_alias :scream: ).

    enhancement 
    opened by nicofrand 4
Releases(v1.2.1)
  • v1.2.1(Dec 28, 2022)

    Details

    This release just includes some minor enhancements and bug-fixes to bundle that accumulated since v1.2.0.

    :mega: New Notification Services:

    n/a

    :bulb: Features

    • macosx:// added support for click= keyword argument to support hyperlinks (#789)
      • this is a wrapper to -open in the terminal-notifier underlining tool
    • mailto:// better handling of emails that contain a + in their username (#779)

    :heart: Life-Cycle Support

    • mailto:// re-factored bulk email transfers to re-use already open connection ( #774) - thanks @amotl
    • GitHub Workflow and Environment/Testing improvements (#728, #771, #783) - thanks @amotl
    • Complete rewrite of D7 Networks (d7sms:// ) to support its new API (not backwards compatible with previous) (#791)

    :bug: Bugfixes

    • slack:// correctly returns success message when applicable (#777)
    • TEXT Configuration parsing improved for better tag/URL distinction (#768)

    Installation Instructions

    Apprise is available on PyPI through pip:

    # Install Apprise v1.2.1 from PyPI
    pip install apprise==1.2.1
    
    Source code(tar.gz)
    Source code(zip)
    apprise-1.2.1-py2.py3-none-any.whl(1.05 MB)
    apprise-1.2.1.tar.gz(1.45 MB)
  • v1.2.0(Nov 15, 2022)

    Details

    :mega: New Notification Services:

    :bulb: Features

    • mailto:// handling of name= and from= are now synonymous. (#738)
    • gchat:// supports threadKey argument (#753)
    • pagerduty:// allows manual over-ride of severity= option (which prevents the Apprise auto-assignment from kicking in). (#726)
    • mailto:// efficiency improvements (#679)
    • slack:// URL Markdown support added (#737)

    :heart: Life-Cycle Support

    • Testing Backend and C/I completely re-done (#701) Thank you @amotl :rocket:
      • Travis CI dropped and changed to GitHub Actions (#706, #705 and #702)
      • Python v2.7 left-over cleanup (#686)

    :bug: Bugfixes

    • mailto:// handles outlook.com domains correctly now (#755)
    • discord:// improved markdown support (#718)
    • Config yaml files correctly parse rto and cto correctly (#751)
    • nctalk:// improvements to fix it's handling with API. (#669)
    • opsgenie:// bugfix introduced in Apprise v1.1.0 resolved (#688)

    Installation Instructions

    Apprise is available on PyPI through pip:

    # Install Apprise v1.2.0 from PyPI
    pip install apprise==1.2.0
    
    Source code(tar.gz)
    Source code(zip)
    apprise-1.2.0-py2.py3-none-any.whl(1.05 MB)
    apprise-1.2.0.tar.gz(1.45 MB)
  • v1.1.0(Oct 8, 2022)

    Details

    :mega: New Notification Services:

    :bulb: Features

    • RedHat/Rocky/Alma Linux v9 Support (also now available on EPEL) (#658)
      # Redhat/Rocky/ALMA/Scientific/Oracle Linux 9 instructions:
      sudo dnf config-manager --set-enabled crb
      sudo dnf install epel-release epel-next-release
      
      # Now install Apprise
      sudo dnf install apprise
      

    :heart: Life-Cycle Support

    • :boom: Python v2.7 support dropped (#680)

    :bug: Bugfixes

    • signal:// to support groups ending with an = (equal) symbol (#670)
    • opsgenie:// no longer double stacks body in larger messages (#655)
    • bark:// correctly handles custom ports (#672)
    • mailto:// delivery improvements to better follow mail guidelines (less likely to get email identified as spam) (#660)
    • pagerduty:// bug-fix to correct sending

    Installation Instructions

    Apprise is available on PyPI through pip:

    # Install Apprise v1.1.0 from PyPI
    pip install apprise==1.1.0
    
    Source code(tar.gz)
    Source code(zip)
    apprise-1.1.0-py2.py3-none-any.whl(1.04 MB)
    apprise-1.1.0.tar.gz(1.43 MB)
  • v1.0.0(Aug 6, 2022)

    Details

    :rocket: Finally after 2 years the v1.0.0 release is a reality; the code has been deemed stable enough!

    :bulb: Features

    • :rocket: Custom Notification Support (#454)
      • Users can now leverage @notify decorator and trigger their own notifications that they define.
      • See Here for more details how you can do this.
    • Discord Apprise URL supports thread= directive (#630)

    :heart: Life-Cycle Support

    • Dropped XMPP Support due to instability; will re-add down the road

    :bug: Bugfixes

    • vonage:// support (in replace of legacy nexmo:// (#605)
    • Async bullet proofing (b34051ccafb1d4649440258282633523fd240357) for cases when the event loop is already running
    • Fixed parsing of custom nid for Home Assistant plugin (#627)

    Installation Instructions

    Apprise is available on PyPI through pip:

    # Install Apprise v1.0.0 from PyPI
    pip install apprise==1.0.0
    
    Source code(tar.gz)
    Source code(zip)
    apprise-1.0.0-py2.py3-none-any.whl(1.03 MB)
    apprise-1.0.0.tar.gz(1.42 MB)
  • v0.9.9(Jun 3, 2022)

    Details

    :mega: New Notification Services:

    • Guilded Support added. (#578)
    • Bark Notification Support Added (#582)
    • Line Notification Support Added (#594)
    • PagerDuty Notification Support Added (#522)

    :bulb: Features

    • :books: Signal File Attachment Support Added (#580)

    :heart: Life-Cycle Support

    • Dropped Pronto Mail support (as it no longer has an SMTP access point in the cloud) (3ffac7c372686a058155c16f545a5b42247b7f31)

    :bug: Bugfixes

    • More Telegram HTML bulletproofing added (#579)
    • Zulip to support dashes (-) (#581)
    • Signal Improvements (#592 and #580)
    • Apprise accepts 10 digit phone numbers as being valid now (previously they had to be 11 digits or more) (#591)

    Installation Instructions

    Apprise is available on PyPI through pip:

    # Install Apprise v0.9.9 from PyPI
    pip install apprise==0.9.9
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.9.9-py2.py3-none-any.whl(1.03 MB)
    apprise-0.9.9.tar.gz(1.40 MB)
  • v0.9.8.3(Apr 19, 2022)

    Details

    :mega: New Notification Services:

    • Signal API Support added. (#568)
    • Ntfy Support added. (#524 and #571)

    :bulb: Features

    • :books: Twitter File Attachment Support Added (#536)
    • :zap: Gotify API Key removed from URL Parameters and into Header Files (more secure) (#558)
    • Custom Override support for JSON and XML Notifications
    • always special tag added. Any notifications tagged with this will always be notified regardless of additional tag filters provided there-after. It's like placing a trump card onto one or more notification defined notification services to ensure they are always triggered.

    :heart: Life-Cycle Support

    • Hotmail SMTP Server changed (updated in Email Template) (#557)

    :bug: Bugfixes

    • Title correctly shows in Matrix posts (#545)

    Additional Notes:

    • v0.9.8.1 (2022-04-20) - was created to resolve a Telegram issue introduced a case where <br/> was inserted into all new messages (and is unsupported by the upstream service.
    • v0.9.8.2 (2022-04-23) - was introduced to allow Telegram more bulletproofing around other additional HTML characters that are unsupported (stripping them off for more compatibility) handling without disrupting other services.
    • v0.9.8.3 (2022-04-28) - Re-factored Telegram handling of HTML when provided MARKDOWN

    Installation Instructions

    Apprise is available on PyPI through pip:

    # Install Apprise v0.9.8.3 from PyPI
    pip install apprise==0.9.8.3
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.9.8.3-py2.py3-none-any.whl(1.01 MB)
    apprise-0.9.8.3.tar.gz(1.39 MB)
  • v0.9.7(Feb 2, 2022)

    Details

    :mega: New Notification Services:

    • Amazon SNS Support added. (#491)
    • ServerChan Support added. (#494)
    • DAPNET Support added. (#506)
    • Custom FORM Posts Support added. (#512)
      • If you set the new ?method=get then payload is placed in the URL parameters (encoded) instead of payload/response.
    • Nextcloud Talk Support added. (#515)

    :bulb: Features

    • :rocket: Apprise can now convert from HTML -> TEXT if specified to do so (#527 and #530)
      • Up until this version, if the input was HTML, there was no way Apprise could attempt to format the content to a TEXT look/feel for upstream services (such as text messages, twitter, etc).
    • /opt/homebrew/bin/terminal-notify added to search path added of MacOSX Notification (#509)
    • Custom XML, JSON and FORM notifications support a ?method= option allowing you to change the default (from POST) to GET, DELETE, PUT, and HEAD).
    • FCM Plugin Supports much more Payload Options (#489) allowing for the passing of image_url, priority, and color.
    • Foxmail (qq.com) and 163.com template support added to E-Mail Plugin (#529)
      • Foxmail URLs can now look like mailto://user:[email protected] and Apprise will look after the rest for you
      • 163.com URLs can now look like mailto://user:[email protected] and Apprise will look after the rest for you

    :heart: Life-Cycle Support

    n/a

    :bug: Bugfixes

    • Reddit Posting Improvements (#510 and #528)
    • Telegram bulletproofing on bot owner detection (#517)

    Installation Instructions

    Apprise is available on PyPI through pip:

    # Install Apprise v0.9.7 from PyPI
    pip install apprise==0.9.7
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.9.7-py2.py3-none-any.whl(1.00 MB)
    apprise-0.9.7.tar.gz(1.34 MB)
  • v0.9.6(Dec 2, 2021)

    Details

    :mega: New Notification Services:

    • Apprise API Support added. (#459)
      • This is an alternative to the --config= allowing you to still signal an Apprise API server to trigger notifications you have stored their

    :bulb: Features

    • More secure logging; reducing the possibility of personal information from being visible in log files. (#453)
    • Supplementary URL Support on Pushover calls; (#468 and #477)
      • just include url= and url_title= as part of the Apprise URL
    • Telegram now supports the ability to set a silent mode or disable web page previews. (#466)
      • just include silent=yes and/or preview=no as part of the Apprise URL
    • Support Matrix Notice Types (#460)
      • just include msgtype=notice as part of the Apprise URL to switch the type over
    • New CLI switch --details (-l) which prints a nice detailed list of what plugins are currently loaded based on the OS environment. It also prints details of what is required to make non working plugins active. Here is an example of the output (as it is now) on the CLI:
      image

    :heart: Life-Cycle Support

    • SleekXMPP support dropped from XMPP plugin
    • Re-factored all unit tests to be more modular (1:1 with their respected plugin) (#483)
    • cryptography is no longer a package requirement of Apprise (#483)

    :bug: Bugfixes

    • CLI --interpret-escapes (-e) now works without --title specified (#471)
    • single alpha characters found in a hostname are considered valid (9b5815ef6e4fe501b938b27d33ac98b14fd27894)
    • Discord includes avatar_url in .url() calls
    • XMPP Plugin re-factored to work with slixmpp

    Installation Instructions

    Apprise is available on PyPI through pip:

    # Install Apprise v0.9.6 from PyPI
    pip install apprise==0.9.6
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.9.6-py2.py3-none-any.whl(992.51 KB)
    apprise-0.9.6.tar.gz(1.32 MB)
  • v0.9.5.1(Sep 18, 2021)

    Details

    :mega: New Notification Services:

    • Streamlabs Support added. (#427)
    • MQTT Support added. (#443)
      • Note that the MQTT Plugin depends on paho-mqtt having been pre-installed:
        pip install paho-mqtt
        

    :bulb: Features

    • Syslog now supports remote servers too (rsyslog) (#442)
    • Twilio now supports reference to the API key (#440)
    • HTML support added to Pushover (#437)
      • Activate it using ?format=html on the Apprise URL
    • Nextcloud API introduced in v21 now supported (#432)
      • Users still using earlier releases need to identify the version they are using on the Apprise URL. The default is set to 21 (?version=21) if one is specified.
    • Markdown support added to Matrix Plugin (#431)
      • Activate it using ?format=html on the Apprise URL
    • File Attachment Support added to JSON and XML Plugins (#426)

    :heart: Life-Cycle Support

    • IFTTT regex improvement

    :bug: Bugfixes

    • Better URL Encoding support for MSTeams (#438)

    Installation Instructions

    Apprise is available on PyPI through pip:

    # Install Apprise v0.9.5.1 from PyPI
    pip install apprise==0.9.5.1
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.9.5.1-py2.py3-none-any.whl(984.88 KB)
    apprise-0.9.5.1.tar.gz(1.31 MB)
  • v0.9.4(Aug 12, 2021)

    Details

    :mega: New Notification Services:

    :bulb: Features

    • Apprise.async_notify() function for developers who want to directly leverage the async calls. async_notify() works the same way as notify() (except more efficient). This only works for Python v3.x users (#397)
    • Phone Number handling in Apprise (and the services that use them) has been completely re-factored. Most users won't notice too much here, however a lot more stability and flexibility has been added. (#408)
    • Markdown handling of Slack adjusted to better handle HTML and support links. (#412)

    :heart: Life-Cycle Support

    • Rocket.Chat basic mode updated to work correctly with new restrictions put in place (to prevent people from assuming another's identity). (#419)

    :bug: Bugfixes

    • YAML parsing of keyword arguments from Apprise URLs (such as to) now parse correctly (#404)
    • Matrix local hosting of t2bot now correctly works (#411)
    • Fedora 35 Support (build failing) resolved (#422)

    Installation Instructions

    Apprise is available on PyPI through pip:

    # Install Apprise v0.9.4 from PyPI
    pip install apprise==0.9.4
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.9.4-py2.py3-none-any.whl(967.04 KB)
    apprise-0.9.4.tar.gz(1.29 MB)
  • v0.9.3(May 16, 2021)

    Details

    :mega: New Notification Services:

    :bulb: Features

    n/a

    :heart: Life-Cycle Support

    n/a

    :bug: Bugfixes

    • Re-factored Telegram HTML Escape handling (#358 and #373)
      • This is an extension/fix to a bug created in Apprise v0.9.2 (#383)

    Installation Instructions

    Apprise is available on PyPI through pip:

    # Install Apprise v0.9.3 from PyPI
    pip install apprise==0.9.3
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.9.3-py2.py3-none-any.whl(960.55 KB)
    apprise-0.9.3.tar.gz(1.28 MB)
  • v0.9.2(May 2, 2021)

    Details

    :mega: New Notification Services:

    • Reddit Support added. (#366)

    :bulb: Features

    n/a

    :heart: Life-Cycle Support

    n/a

    :bug: Bugfixes

    • Fixed path issue with Home Assistant notifications (#370)
    • Removed HTML escaping for Telegram TEXT handling (#383)
    • Fixed MSTeams webhook handling for new format (#380)

    Installation Instructions

    Apprise is available on PyPI through pip:

    # Install Apprise v0.9.2 from PyPI
    pip install apprise==0.9.2
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.9.2-py2.py3-none-any.whl(954.16 KB)
    apprise-0.9.2.tar.gz(1.28 MB)
  • v0.9.1(Feb 23, 2021)

    Details

    :mega: New Notification Services:

    :bulb: Features

    • Slack can now accept email targets. This will perform a lookup on the workspace to see if the user exists and notify them if they do. This feature only works if you've configured a Slack bot.
    • Added support for interpret-able escapes via CLI through the added argument --interpret-escapes (-e). (#349)
      • As an example, this allows you to pass in sequences such as \n and \r and have them translate into their equivalent ascii newline and carriage return characters
    • Gotify now supports for markdown (#358)
    • FCM (Firebase Cloud Messaging) completely re-factored/rewritten to support both the Legacy and OAuth2 Methods (#193)
    • XMPP re-factored to support slixmpp library for Python v3.7+ users (#240)

    :heart: Life-Cycle Support

    :bug: Bugfixes

    • Corrected issue with 2 CLI unit tests not passing (preventing v0.9.0 from going into EPEL) BZ1913619
    • Better asyncio handling in Python <3.7 using threading (#364)

    Installation Instructions

    Apprise is available on PyPI through pip:

    # Install Apprise v0.9.1 from PyPI
    pip install apprise==0.9.1
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.9.1-py2.py3-none-any.whl(946.80 KB)
    apprise-0.9.1.tar.gz(1.27 MB)
  • v0.9.0(Dec 30, 2020)

    Details

    :mega: New Notification Services:

    :bulb: Features

    • Mailgun significantly enhanced to now support:
      • :email: Blind Carbon Copy Addresses (bcc)
      • :email: Carbon Copy Addresses (cc)
      • :books: Email Attachments support
      • :m: Email Headers
      • :1234: Email Tokens. Mailgun allows you to identify keys/values and populate email with entries like %keyword% which gets swapped with it's corresponding value once the email gets prepared.
    • General email (mailto://) updated to support Email Headers passed in through the Apprise URL.
    • :star: apprise.LogCapture() class introduced allowing users to wrap their calls to notify() and extrapolate the generated logs from each call. This is very useful when notifying more than 1 service and trying to determine where something may have gone wrong. Content can be captured to both memory and files. More details can be found here, #306 and PR #311.
    • :email: Zoho email (21d7ef1ff4cc03be6789c66c96b33d8f68e694bb):
      • supports @zohomail.com domain
      • uses STARTTLS (port 567) now vs SSL on 465
    • underscores (_) are now accepted in hostnames during parsing (even though technically they aren't allowed) - #324
    • Amazon SNS services parses responses/messages better - #320
    • Added support for Environment Variables - #334
      1. APPRISE_URLS: When defined, you can pre-provide apprise with a set of one or more URLs it can use to notify by default.
      2. APPRISE_CONFIG: You can set this to the absolute path of an Apprise Configuration File (either TEXT or YAML based).
    • Some new rules/structuring come with the environment variable change too (just enforcing order of detected inputs) and which to use:
      1. URLs by command line
        • A warning is issued to the screen if a (--config or -c) is also specified as it will be ignored
        • A warning is issued to the screen if a (--tag or -g) is also specified as it will be ignored
      2. Configuration by command line
      3. URLs by environment variable: APPRISE_URLS
        • A warning is issued to the screen if a (--tag or -g) is also specified as it will be ignored
      4. Configuration by environment variable: APPRISE_CONFIG
      5. Default Configuration File(s) if found - no change here prior to this commit.

    :heart: Life-Cycle Support

    • n/a

    :bug: Bugfixes

    • SparkPost handling of cc and bcc messages fixed #309
    • Pushover validation checks on the user_key and token have been eliminated in Apprise. These have been left for the upstream server (in this case Pushover) to validate instead. #313
    • Zulip references stream instead of channel #330

    Installation Instructions

    Apprise is available on PyPI through pip:

    # Install Apprise v0.9.0 from PyPI
    pip install apprise==0.9.0
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.9.0-py2.py3-none-any.whl(928.12 KB)
    apprise-0.9.0.tar.gz(1.24 MB)
  • v0.8.9(Oct 4, 2020)

    Details

    :mega: New Notification Services:

    :bulb: Features

    • Microsoft Teams Templating (#292)! The ability to provide your own MessageCard instead of using the built in one. The templating engine requires no additional includes and additionally supports dynamic tokens that you can pass in through the Apprise URL; see #299 for details.
    • Improved YAML configuration parsing (#288)
    • Added Yandex Email support to mailto:// Plugin (#303)

    :heart: Life-Cycle Support

    • n/a

    :bug: Bugfixes

    • Lametric Time cloud mode support fixed (#293)
    • Reworked Discord markdown enhancements that Apprise supports (the addition of the # keyword) to parse content better (#229)
    • Async/Sync update to fix warning message appearing in Apprise Home Assistant Integration (#304)

    Installation Instructions

    Apprise is available on PyPI through pip:

    # Install Apprise v0.8.9 from PyPI
    pip install apprise==0.8.9
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.8.9-py2.py3-none-any.whl(906.32 KB)
    apprise-0.8.9.tar.gz(1.22 MB)
  • v0.8.8(Sep 2, 2020)

    Details

    :mega: New Notification Services:

    • n/a

    :bulb: Features

    • :star: Message notifications are now asynchronous for Python 3 users! (#273) :rocket:
      • CLI user can set --disable-async or -Da on the command line to disable this and go back to the legacy synchronous method which much slower when dealing with more then one notification.
      • Developers can set AppriseAsset(async_mode=False) before passing the asset into the Apprise() object to disable this.
    • :star: Configuration files can now contain the keyword include allowing further (Apprise) configuration files to be parsed. (#226) :rocket:
      • text base example:
        include http://localhost/path/to/more/configuration/entries
        # No limit to the number of includes you specify
        include file:///path/to/another/configuration/file/on/your/system
        
      • yaml base example:
        include:
            - http://localhost/path/to/more/configuration/entries
              # No limit to the number of includes you specify
            - file:///path/to/another/configuration/file/on/your/system
        
      • The following restrictions apply to the new include value:
        1. Developers: By default include entries are disabled unless the developer sets recursion to a value greater than it's default of zero (0) when initializing a AppriseConfig() object. e.g: AppriseConfig(recursion=1). A value of 1 allows 1 level of includes to work. However, if the configuration include also contains an include statement, it would be ignored. You can increase the level of recursion to whatever you wish.
        2. CLI: The apprise tool by default has a recursion of one (1) allowing one level of include statements to be executed. This can be altered by setting the --recursion-depth=<value> (-R <value>) switch.
        3. include statements have restrictions on the content being included. For example, a file:// can include another file://. But a http:// can not include a file://. A file:// can however include a http://. All of this has been put in place for security reasons. A server hosting Apprise through a website by default will never allow a user to include local files into the configuration. Developers can disable this feature by setting insecure_includes to True when initializing a AppriseConfig() object. e.g: AppriseConfig(recursion=1, insecure_includes=True).
    • Advance Email Parsing added (#276)! All notification services that take email addresses as input can now support the (additional) formats:
    • Added a /bin directory to repository which just contains a few test tools that make it easier to test the code in development.
      • :gear: apprise: a way of executing the code straight after pulling down the source code. This really helps in testing new features being developed right within the very branch you're working in.
      • :gear: test.sh: a simple script you can use to run the unit tests and/or even a very specific one (or set of them).
      • :gear: checkdone.sh: a simple script that runs a few checks against the entire code checked out to verify if there are any errors (instead of waiting for the Travis-Ci to inevitably catch them)
    • Lametric Time now supports an icon= URL argument so that you can over-ride the default icon assigned and instead choose from any of the ones provided on their website here.

    :heart: Life-Cycle Support

    • Removed deprecated code along with their paired notices that have been all lingering for more than a year now (#283)

    :bug: Bugfixes

    • Reverse URL broke in previous release (v0.8.7); this bug was fixed restoring the correct functionality of Apprise.url() (#275)

    Installation Instructions

    Apprise is available on PyPI through pip:

    # Install Apprise v0.8.8 from PyPI
    pip install apprise==0.8.8
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.8.8-py2.py3-none-any.whl(891.89 KB)
    apprise-0.8.8.tar.gz(1.20 MB)
  • v0.8.7(Aug 13, 2020)

    Details

    :mega: New Notification Services:

    :bulb: Features

    • Apprise Socket Timeouts enforced and configurable. Queries made to upstream servers can now timeout if the external source isn't available or is taking to log to reply. By default the times are set as follows:
      • Socket Connect Timeout which defaults to 4.0 seconds. This is the length in time Apprise will wait for an upstream server to accept a connection from it before giving up.
        • You can over-ride this value by specifying the cto= parameter on your Apprise URL.
      • Socket Read Timeout which defaults to 4.0 seconds. This is the maximum length in time Apprise will wait for on an already established upstream connection to which the server has gone dormant and no longer appears to be responding.
        • You can over-ride this value by specifying the rto= parameter on your Apprise URL.
    • Improved logging within Apprise to make it a bit more obvious why a URL may have not loaded correctly. Apprise remains to be silent on the CLI out of the box, so improved logging still requires at least one --verbose switch (-v)
    • Apprise URLs that accept valid hostnames:
      • Now additionally support IPv6 entries. To be RFC compliant, IPv6 files should be wrapped in square brackets (such as kodi://[2001:0db8:85a3:0000:0000:8a2e:0370:7334]). However at this time Apprise can safely detect URLs that do not include the square brackets ([]) and improvises by adding them for you.
      • IPv4 support drastically improved. Only valid IP addresses are accepted if provided.

    :heart: Life-Cycle Support

    • Discord changing API servers to new location;. Legacy servers will no longer work after November 7th, 2020. Apprise was updated to point to new API location to avoid having any issues at this time.

    :bug: Bugfixes

    • Nexmo credentials bugfix (138c8eb)
    • Test cases now pass against Fedora 33 Rawhide mass rebuild (#263) (BZ1865273)
    • Email has better internationalization support now (#268)
    • Growl Notifications Missing Notification Header Issue Resolved (#251)
      • gntp library also removed from Apprise an is a separate dependency instead:
        # The following will allow you to use Growl Notifications again (for those using it)
        pip install gntp
        
        # This has also already been added to the `requirements.txt` file
        # Apprise puts out information to the screen reminding those that have not done this
        #  and are attempting to use Growl to run the pip command below as well.
        

    Installation Instructions

    Apprise is available on PyPI through pip:

    # Install Apprise v0.8.7 from PyPI
    pip install apprise==0.8.7
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.8.7-py2.py3-none-any.whl(883.61 KB)
    apprise-0.8.7.tar.gz(1.19 MB)
  • v0.8.6(Jun 13, 2020)

    Details

    • New Notification Services:

    • Features:

      • Discord Plugin can now accept a avatar_url parameter allowing you to override the one set by apprise.
      • A new logo! :star:
    • Bugfixes:

      • Python 3 and Apprise API compatibility with CLI tool now fixed (#239)

    Apprise is also available on PyPI through pip:

    # Install Apprise v0.8.6 from PyPI
    pip install apprise==0.8.6
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.8.6-py2.py3-none-any.whl(874.81 KB)
    apprise-0.8.6.tar.gz(1.18 MB)
  • v0.8.5(Mar 30, 2020)

    Details

    • Features:

      • XMPP Plugin completely refactored/rewritten to now work correctly (#213)
        • This specific notification service requires that sleekxmpp is available on your system.
      • Join now additionally supports targets that identify the Device Names (#205)
    • Bugfixes:

      • Eliminated Slack Token min/max length validation (#219)
      • Email plugin now supports connecting to SMTP server without user/pass (#214)
      • Telegram notifications can correctly pass HTML to the upstream server (#203)

    Apprise is also available on PyPI through pip:

    # Install Apprise v0.8.5 from PyPI
    pip install apprise==0.8.5
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.8.5-py2.py3-none-any.whl(745.77 KB)
    apprise-0.8.5.tar.gz(1.07 MB)
  • v0.8.4(Feb 1, 2020)

    Details

    • New Notification Services:

    • Features:

      • AppriseConfig object now supports a new function called add_config() which allows you to directly add configuration (into the object) v.s. always having to point it at a file or a website. (#199)
    • Bugfixes:

      • Resolved issue where an error response was returned from Apprise even thought successful posted to Slack (#195)

    Apprise is also available on PyPI through pip:

    # Install Apprise v0.8.4 from PyPI
    pip install apprise==0.8.4
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.8.4-py2.py3-none-any.whl(744.01 KB)
    apprise-0.8.4.tar.gz(1.06 MB)
  • v0.8.3(Jan 13, 2020)

    Details

    Apprise is also available on PyPI through pip:

    # Install Apprise v0.8.3 from PyPI
    pip install apprise==0.8.3
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.8.3-py2.py3-none-any.whl(731.65 KB)
    apprise-0.8.3.tar.gz(1.08 MB)
  • v0.8.2(Nov 26, 2019)

    Details

    • New Notification Services:
    • Enhancements:
      • Slack now supports bots too.
      • File Attachment Support
        • AppriseAttachment() class added for working with attachments using the API.
        • --attach (-a) added to CLI allowing users to attach content from both the internet and/or local files to the supported services (See #173 for details). Currently the supported services are:
      • There are not limits to the number of attachments you can provide (assuming the upstream service can handle it).
    • Cleaned up images/icons (look/feel)
    • Configuration files can now be optionally cached or not now; see #175
    • Bugfixes:
      • Discord error code 50006 issue resolved (#180)

    Apprise is also available on PyPI through pip:

    # Install Apprise v0.8.2 from PyPI
    pip install apprise==0.8.2
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.8.2-py2.py3-none-any.whl(713.97 KB)
    apprise-0.8.2.tar.gz(1.04 MB)
  • v0.8.1(Oct 14, 2019)

    Details

    • New Notification Services:
    • Enhancements:
      • Re-factored how most services are instantiated. All QA moved to to class initialization and not during the sending process. This allows users to know right away if they're URL is ready, not after they attempt to send a notification with one.
      • --dry-run (-d) switch added that allow you to determine what services will be notified without actually performing the notification.
      • Tagging is now exclusive. This means if you associate a tag with a URL, you can only trigger that notification if you perform the notification while specifying to match against that very tag. More information can be found in the PR #153
    • Bugfixes:
      • Native URL Parsing from Config file (PR #164)
      • Native URLs can not contain parseable parameters

    Apprise is also available on PyPI through pip:

    # Install Apprise v0.8.1 from PyPI
    pip install apprise==0.8.1
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.8.1-py2.py3-none-any.whl(730.11 KB)
    apprise-0.8.1.tar.gz(681.11 KB)
  • v0.8.0(Sep 21, 2019)

    Details

    • New Notification Services:
    • Pushjet Notifications Rewrite
      • No longer uses/references pushjet library; is complete standalone now which dropped the code base by 800+ lines of code and one less dependency in requirements.txt.
    • Enhancements:
      • Added Cc and Bcc support to Email Notifications.
    • Bugfixes:
      • Better support for Discord format=markdown (Issue #149)

    Apprise is also available on PyPI through pip:

    # Install Apprise v0.8.0 from PyPI
    pip install apprise==0.8.0
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.8.0-py2.py3-none-any.whl(717.15 KB)
    apprise-0.8.0.tar.gz(669.82 KB)
  • v0.7.9(Jul 20, 2019)

    Details

    Apprise is also available on PyPI through pip:

    # Install Apprise v0.7.9 from PyPI
    pip install apprise==0.7.9
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.7.9-py2.py3-none-any.whl(697.59 KB)
    apprise-0.7.9.tar.gz(663.52 KB)
  • v0.7.8(Jun 6, 2019)

    Details

    This is a minor release that fixes an bug in cases where the i18n localization language can't be detected and apprise just flat out crashes. This issue is prominent in (docker driven) containers references since not all of them create POSIX compatible environments.

    The following enhancement was also accomodated:

    • MatterMost Notifications slightly modified to support sub-paths. - #116

    Apprise is also available on PyPI through pip:

    # Install Apprise v0.7.8 from PyPI
    pip install apprise==0.7.8
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.7.8-py2.py3-none-any.whl(694.66 KB)
    apprise-0.7.8.tar.gz(665.30 KB)
  • v0.7.7(Jun 1, 2019)

    Details

    • New Notification Services:
    • Default configuration paths added for Microsoft Users: (#111)
      • %APPDATA%/Apprise/apprise
      • %APPDATA%/Apprise/apprise.yml
      • %LOCALAPPDATA%/Apprise/apprise
      • %LOCALAPPDATA%/Apprise/apprise.yml
    • Rocket.Chat Notifications re-factored to support Incoming Webhooks. - #107
    • Pushover Notification now supports the ability to provide different audio/sounds - #113
    • Slack Notifications no longer require you to identify at least one channel. By default the channel associated with the Incoming web-hook is notified. - #108
    • Native URL support: Allow users to add the notification URL using the one provided by the notification service itself instead of having to manipulate it to fit the Apprise standards/requirements - #109
    • Apprise.details() upgraded to provide each individual token needed to construct an apprise URL. More details on this can be found here - #59
      • Internationalization support added (i18n) was added to support the token identification. At this time only English is supported, but set up in such a way that more translations can be added/provided by those wishing to contribute.
    • Minor bug fixes

    Apprise is also available on PyPI through pip:

    # Install Apprise v0.7.7 from PyPI
    pip install apprise==0.7.7
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.7.7-py2.py3-none-any.whl(694.96 KB)
    apprise-0.7.7.tar.gz(664.87 KB)
  • v0.7.6(Apr 17, 2019)

  • v0.7.5(Apr 7, 2019)

    Details

    • New Notification Services:
    • pyYAML v5.1+ Warning fixed - #85
    • Enforced normalization of URL parsing which in addition to addressing other fields specifically forces the escaping of the user/password variables that was missing in earlier versions of apprise. Those impacted by this change should see this link. - #93
    • RPM Packaging added for Fedora/Redhat/CentOS etc support. - #91
    • Added 2 new logging levels:
      • Trace: This shows up if you add a 4th -v switch to the apprise CLI. It is just an additional level of added debug information.
      • Deprecate: This log level is enabled 'always' even if no -v switch is provided on the CLI. It is used to identify deprecated references that are being kept around for backwards compatibility.
    • Minor bug fixes

    Apprise is also available on PyPI through pip:

    # Install Apprise v0.7.5 from PyPI
    pip install apprise==0.7.5
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.7.5-py2.py3-none-any.whl(663.38 KB)
    apprise-0.7.5.tar.gz(633.99 KB)
  • v0.7.4(Mar 10, 2019)

    Details

    • Configuration file support! Adding both YAML an TEXT based support #55

      • Read your configure from a website and/or just a local file.
      • Development API drastically re-factored to make this seamlessly for developers to take advantage of too
      • Scans some default files automatically from the CLI and automatically loads the configuration if no other config/notification URL is otherwise specified.
        • ~/.apprise
        • ~/.apprise.yml
        • ~/.config/apprise
        • ~/.config/apprise.yml
      • Configuration files allow you to associate tags with your URLs, for this reason the CLI was expanded to include --tag= (-g) which allows you to only notify entries in the configuration mapped to the specified tag you specify.
      • Configuration files can be loaded manually through the CLI using --config= (-c) as well.
    • Additional API functionality added to simplify developer user experience #74

      • ability to iterate the apprise object
      • message overflow support allowing users to specify overflow= on their defined URLs. Possible options are:
        • upstream: This is the default option anyway if not otherwise specified. This means that the message to be sent should be just sent as-is and untouched. Let the upstream server determine how to handle it's contents.
        • truncate: If the message exceeds what we know the upstream server is expecting, we automatically truncate it's contents so that it won't potentially cause the upstream server to reject it.
        • split: Similar to truncate, except instead of just cutting the message off, attempt to preserve the title and break the body up into multiple parts. Each part is then automatically sent in order.
    • Notification Service Changes:

      • Matrix - completely re-factored to greatly simplify it's use #80
      • Custom JSON and XML entries now support the ability to add custom HTML Headers using the plus symbol on the Parameter line of the URL. #74
      • IFTTT updated to leverage the +/- functionality added to the Parameter line of the URL to add/remove entries to your template.
    • Minor bug-fixes

    Apprise is also available on PyPI through pip:

    # Install Apprise v0.7.4 from PyPI
    pip install apprise==0.7.4
    
    Source code(tar.gz)
    Source code(zip)
    apprise-0.7.4-py2.py3-none-any.whl(632.54 KB)
    apprise-0.7.4.tar.gz(602.41 KB)
Owner
Chris Caron
If it ain't broke, then I haven't tried to fix it yet.
Chris Caron
📷 Instagram Bot - Tool for automated Instagram interactions

InstaPy Tooling that automates your social media interactions to “farm” Likes, Comments, and Followers on Instagram Implemented in Python using the Se

Tim Großmann 13.5k Dec 01, 2021
Discord ToolBox is a discord bot developed by DJD320 created for the purpose of having some convenient tools in the form of a single bot.

Discord ToolBox Discord ToolBox is a discord bot developed by DJD320 created for the purpose of having some convenient tools in the form of a single b

3 Aug 07, 2021
Fastest Pancakeswap Sniper BOT TORNADO CASH 2022-V1 (MAC WINDOWS ANDROID LINUX)

Fastest Pancakeswap Sniper BOT TORNADO CASH 2022-V1 (MAC WINDOWS ANDROID LINUX) ⭐️ AUTO BUY TOKEN ON LAUNCH AFTER ADD LIQUIDITY ⭐️ ⭐️ Support Uniswap

Crypto Trader 7 Jan 31, 2022
ServiceX DID Finder Girder

ServiceX_DID_Finder_Girder Access datasets for ServiceX from yt Hub Finding datasets This DID finder is designed to take a collection id (https://gird

1 Dec 07, 2021
RDMAss - A Python Discord bot creating an interaction with RDM API

RDMAss A Python Discord bot creating an interaction with RDM API. Features Assig

5 Sep 21, 2022
Hack WhatsApp Account Easily(Android)

X-Whatsapp Hack WhatsApp Account Easily(Android) HOW TO RUN 👇 (Termux) pkg update && pkg upgrade pkg install python pkg install git git clone https:/

KiLL3R_xRO 72 Dec 21, 2022
A bot which is a ghost and you can make friends with it

This is a bot which is a ghost and you can make friends with it. It will haunt your friends. Explore and test the bot in replit !

Siwan SR 0 Oct 06, 2022
Drover is a command-line utility for deploying Python packages to Lambda functions.

drover drover: a command-line utility for deploying Python packages to Lambda functions. Background This utility aims to provide a simple, repeatable,

Jeffrey Wilges 4 May 19, 2021
Adds a new git subcommand named "ranch".

Git Ranch This script adds ranch, a new subcommand for git that makes it easier to order 1 Gallon of Kraft Ranch Salad Dressing from Amazon. Installat

Austin T Schaffer 8 Jul 06, 2022
An API wrapper around Discord API.

NeoCord This project is work in progress not for production use. An asynchronous API wrapper around Discord API written in Python. Features Modern API

Izhar Ahmad 14 Jan 03, 2022
An accessible Archive of Our Own reader application written in python.

AO3-A11y. Important disclaimer. This project is under active development. Many features might not yet be present, or some things might not work at all

4 Nov 11, 2022
Build a better understanding of your data in PostgreSQL.

Data Fluent for PostgreSQL Build a better understanding of your data in PostgreSQL. The following shows an example report generated by this tool. It g

Mark Litwintschik 28 Aug 30, 2022
SpotPlay2YouPlay - Converts new additions to a Spotify playlist to a matching Youtube playlist

SpotPlay2YouPlay - Converts new additions to a Spotify playlist to a matching Youtube playlist, can also be configured to converting whole playlists with the refresh fun

9 Mar 06, 2022
Basic Discord python bot

#How to Create a Discord Bot Account In order to work with the Python library and the Discord API, we must first create a Discord Bot account. Here ar

Tustus 1 Oct 13, 2021
Cool Discord bot for you

BountyBot Баунти – современный бот созданный с целью сделать ваш сервер лучше! В кратце В нем присутствует множество основных и интересных функций, та

Leestarb Original 1 Nov 22, 2021
Total servers you're in!

Discord-Servercount With this script you can check the amount of servers you are in, along with statistics of how many servers you are owner in and in

Nickyux 1 Feb 12, 2022
Aria & Qbittorent Mirror Bot

Eunha Mirror Eunha Mirror is a multipurpose Telegram Bot writen in Python for mirroring files on the Internet to our beloved Google Drive. Features su

ovin 158 Dec 19, 2022
Discord-Bot - Bot using nextcord for beginners

Discord-Bot Bot using nextcord for beginners! Requirements: 1 :- Install nextcord by typing "pip install nextcord" Thats it! You can use this code any

INFINITE_. 3 Jan 10, 2022
Change Discord HypeSquad in few seconds!

a simple python script that change your hypesquad to what house you choose

Ho3ein 5 Nov 16, 2022
Git Plan - a better workflow for git

git plan A better workflow for git. Git plan inverts the git workflow so that you can write your commit message first, before you start writing code.

Rory Byrne 178 Dec 11, 2022