API:E-Mail an Benutzer

From mediawiki.org
This page is a translated version of the page API:Emailuser and the translation is 100% complete.


Zeichen

Um eine E-Mail zu senden, wird ein E-Mail-Token (dt. Zeichen) benötigt. Dieses Token ist gleich dem Bearbeiten-Token und das gleiche für alle Empfänger, ändert sich jedoch bei jedem Login. Ein E-Mail-Token kann über action=query&meta=tokens oder über die folgende Methode erhalten werden:

Ein E-Mail-Token erhalten

Ergebnis
{
    "batchcomplete": "",
    "query": {
        "tokens": {
            "csrftoken": "7773cbfff263682c97ffc74b8672cbf25a5e0045+\\"
        }
    }
}

E-Mail an Benutzer senden

Du kannst eine E-Mail an Benutzer, die eine bestätigte E-Mail-Adresse haben, mit action=emailuser senden. E-Mail senden unterliegt Ratenbegrenzungen.

Parameter

  • target: Benutzer, an den die E-Mail gesendet wird
  • subject: Der Betreff der Nachricht
  • text: Die Nachricht
  • token: Das Token, das in der vorherigen Anfrage erhalten wurde. Achte darauf, das + als %2B zu kodieren
  • ccme: Wenn gesetzt, wird eine Kopie der E-Mail an dich gesendet werden

Beispiele

In diesem Beispiel werden alle Parameter mit einer GET-Anfrage übermittelt, um es einfach zu halten. Allerdings erfordert action=emailuser POST-Anfragen, und GET-Anfragen verursachen einen Fehler.

Senden einer E-Mail an User:Catrope

Ergebnis
<?xml version="1.0" encoding="utf-8"?>
<api>
  <emailuser result="Success" />
</api>

Beispielcode

Python

#!/usr/bin/python3

"""
    send_email.py

    MediaWiki API Demos
    Demo of `Emailuser` module: sending POST request to send email to wiki user

    Author: Jayprakash12345
    MIT license
"""

import requests

S = requests.Session()

URL = "https://test.wikipedia.org/w/api.php"

# Step 1: GET request to fetch login token
PARAMS_0 = {
    "action": "query",
    "meta": "tokens",
    "type": "login",
    "format": "json"
}

R = S.get(url=URL, params=PARAMS_0)
DATA = R.json()

LOGIN_TOKEN = DATA['query']['tokens']['logintoken']

# Step 2: POST request to log in. Use of main account for login is not
# supported. Obtain credentials via Special:BotPasswords
# (https://www.mediawiki.org/wiki/Special:BotPasswords) for lgname & lgpassword
PARAMS_1 = {
    "action": "login",
    "lgname": "your_bot_username",
    "lgpassword": "your_bot_password",
    "lgtoken": LOGIN_TOKEN,
    "format": "json"
}

R = S.post(URL, data=PARAMS_1)

# Step 3: GET request to fetch Email token
PARAMS_2 = {
    "action": "query",
    "meta": "tokens",
    "format": "json"
}

R = S.get(url=URL, params=PARAMS_2)
DATA = R.json()

EMAIL_TOKEN = DATA['query']['tokens']['csrftoken']

# Step 4: POST request to send an email
PARAMS_3 = {
    "action": "emailuser",
    "target": "Test",
    "subject": "Hi",
    "text": "Just wanted to say hi",
    "token": EMAIL_TOKEN,
    "format": "json"
}

R = S.post(URL, data=PARAMS_3)
DATA = R.text

print(DATA)

PHP

<?php

/*
    send_email.php

    MediaWiki API Demos
	Demo of `Emailuser` module: sending POST request to send email to wiki user

    MIT license
*/

$endPoint = "https://en.wikipedia.org/w/api.php";

$login_Token = getLoginToken(); // Step 1
loginRequest( $login_Token ); // Step 2
$csrf_Token = getCSRFToken(); // Step 3
sendemail( $csrf_Token ); // Step 4

// Step 1: GET request to fetch login token
function getLoginToken() {
	global $endPoint;

	$params1 = [
		"action" => "query",
		"meta" => "tokens",
		"type" => "login",
		"format" => "json"
	];

	$url = $endPoint . "?" . http_build_query( $params1 );

	$ch = curl_init( $url );
	curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
	curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" );
	curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" );

	$output = curl_exec( $ch );
	curl_close( $ch );

	$result = json_decode( $output, true );
	return $result["query"]["tokens"]["logintoken"];
}

// Step 2: POST request to log in. Use of main account for login is not
// supported. Obtain credentials via Special:BotPasswords
// (https://www.mediawiki.org/wiki/Special:BotPasswords) for lgname & lgpassword
function loginRequest( $logintoken ) {
	global $endPoint;

	$params2 = [
		"action" => "login",
		"lgname" => "your_bot_username",
		"lgpassword" => "your_bot_password",
		"lgtoken" => $logintoken,
		"format" => "json"
	];

	$ch = curl_init();

	curl_setopt( $ch, CURLOPT_URL, $endPoint );
	curl_setopt( $ch, CURLOPT_POST, true );
	curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $params2 ) );
	curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
	curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" );
	curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" );

	$output = curl_exec( $ch );
	curl_close( $ch );

}

// Step 3: GET request to fetch CSRF token
function getCSRFToken() {
	global $endPoint;

	$params3 = [
		"action" => "query",
		"meta" => "tokens",
		"format" => "json"
	];

	$url = $endPoint . "?" . http_build_query( $params3 );

	$ch = curl_init( $url );

	curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
	curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" );
	curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" );

	$output = curl_exec( $ch );
	curl_close( $ch );

	$result = json_decode( $output, true );
	return $result["query"]["tokens"]["csrftoken"];
}

// Step 4: POST request to send an email
function sendemail( $csrftoken ) {
	global $endPoint;

	$params4 = [
		"action" => "emailuser",
		"target" => "ABCD",
		"subject" => "API test",
		"text" => "Good to see you",
		"token" => $csrftoken,
		"format" => "json"
	];

	$ch = curl_init();

	curl_setopt( $ch, CURLOPT_URL, $endPoint );
	curl_setopt( $ch, CURLOPT_POST, true );
	curl_setopt( $ch, CURLOPT_POSTFIELDS, http_build_query( $params4 ) );
	curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true );
	curl_setopt( $ch, CURLOPT_COOKIEJAR, "cookie.txt" );
	curl_setopt( $ch, CURLOPT_COOKIEFILE, "cookie.txt" );

	$output = curl_exec( $ch );
	curl_close( $ch );

	echo ( $output );
}

JavaScript

/*  
    send_email.js
 
    MediaWiki API Demos
    Demo of `Emailuser` module: sending POST request to send email to wiki user

    MIT license
*/

var request = require('request').defaults({jar: true}),
    url = "https://en.wikipedia.org/w/api.php";

// Step 1: GET request to fetch login token
function getLoginToken() {
    var params_0 = {
        action: "query",
        meta: "tokens",
        type: "login",
        format: "json"
    };

    request.get({ url: url, qs: params_0 }, function (error, res, body) {
        if (error) {
            return;
        }
        var data = JSON.parse(body);
        loginRequest(data.query.tokens.logintoken);
    });
}

// Step 2: POST request to log in. 
// Use of main account for login is not
// supported. Obtain credentials via Special:BotPasswords
// (https://www.mediawiki.org/wiki/Special:BotPasswords) for lgname & lgpassword
function loginRequest(login_token) {
    var params_1 = {
        action: "login",
        lgname: "bot_username",
        lgpassword: "bot_password",
        lgtoken: login_token,
        format: "json"
    };

    request.post({ url: url, form: params_1 }, function (error, res, body) {
        if (error) {
            return;
        }
        getCsrfToken();
    });
}

// Step 3: GET request to fetch CSRF token
function getCsrfToken() {
    var params_2 = {
        action: "query",
        meta: "tokens",
        format: "json"
    };

    request.get({ url: url, qs: params_2 }, function(error, res, body) {
        if (error) {
            return;
        }
        var data = JSON.parse(body);
        send_email(data.query.tokens.csrftoken);
    });
}

// Step 4: POST request to send an email
function send_email(csrf_token) {
    var params_3 = {
        action: "emailuser",
        target: "ABCD",
        subject: "API Test",
        text: "Hello",
        token: csrf_token,
        format: "json"
    };

    request.post({ url: url, form: params_3 }, function (error, res, body) {
        if (error) {
            return;
        }
        console.log(body);
    });
}

// Start From Step 1
getLoginToken();

MediaWiki JS

/*
	send_email.js

	MediaWiki API Demos
	Demo of `Emailuser` module: sending POST request to send email to wiki user

	MIT License
*/

var params = {
		action: 'emailuser',
		target: 'ABC',
		subject: 'Hi',
		text: 'Just wanted to say hi',
		format: 'json'
	},
	api = new mw.Api();

api.postWithToken( 'csrf', params ).done( function ( data ) {
	console.log( data );
} );

Mögliche Fehler

Zusätzlich zu den üblichen Sachen :

Code Information
cantsend You are not logged in, you do not have a confirmed email address, or you are not allowed to send email to other users, so you cannot send email.
blockedfrommail You have been blocked from sending email.
usermaildisabled E-Mailversand wurde deaktiviert
notarget You have not specified a valid target for this action.
noemail Dieser Benutzer hat keine gültige E-Mail-Adresse angegeben.
nowikiemail Dieser Benutzer möchte keine E-Mails von anderen Benutzern erhalten.

Prüfen des versandfertigen Status

Bevor du versuchst, eine E-Mail zu senden, ist es empfehlenswert, zu überprüfen, ob der Benutzer per E-Mail erreichbar ist. Um dies zu tun, kannst du eine Listenabfrage auf den Benutzer ausführen (oder auf mehrere Benutzer auf einmal). Hier ist ein Beispiel im Gebrauch mit Ajax:

new mw.Api().get( {
  action: 'query',
  list: 'users',
  ususers: mw.config.get( 'wgTitle' ),
  usprop: 'emailable',
  rawcontinue: ''
} ).done( function( getEmailable ) {
  alert( ( getEmailable.query.users[ 0 ][ 'emailable' ] !== undefined ) ? 'emailable' : 'not emailable' );
} );

Wenn du von einem clientseitigen Skript testest, ist es auch möglich, einfach die Existenz des t-emailuser-Listenelements zu überprüfen:

emailable = $( '#t-emailuser' ).length ? true : false;

action=emailuser

(main | emailuser)
  • This module requires read rights.
  • This module requires write rights.
  • This module only accepts POST requests.
  • Source: MediaWiki
  • License: GPL-2.0-or-later

Email a user.

Specific parameters:
Other general parameters are available.
target

User to send the email to.

This parameter is required.
subject

Subject header.

This parameter is required.
text

Email body.

This parameter is required.
ccme

Send a copy of this mail to me.

Type: boolean (details)
token

A "csrf" token retrieved from action=query&meta=tokens

This parameter is required.
Example:
Send an email to the user WikiSysop with the text Content.
api.php?action=emailuser&target=WikiSysop&text=Content&token=123ABC [open in sandbox]