Jump to content

API: электронная почта пользователя

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


Токен

Чтобы отправить электронное письмо, требуется электронный токен. Этот токен равен токену редактирования и меняется при каждом входе в систему. Электронные токены можно получить за 1 доллар США или следующим способом:action=query&meta=tokens

Получение электронного токена
Результат
{
    "batchcomplete": "",
    "query": {
        "tokens": {
            "csrftoken": "7773cbfff263682c97ffc74b8672cbf25a5e0045+\\"
        }
    }
}

Отправка электронной почты пользователям

Вы можете отправлять сообщения электронной почты пользователям, у которых есть подтвержденный адрес электронной почты, за 1 доллар США.action=emailuser Отправка электронной почты при условии местный налог

Параметры

  • target: или пришлите письмо на адрес
  • subject: Тема сообщения
  • text: Сообщение
  • token: Токен, полученный в предыдущем запросе. Не забудьте преобразовать $code1 в $code2
  • ccme: Если установлено, что копия электронного письма будет отправлена вам

Примеры

В этом примере все параметры передаются в запросе GET ради простоты. Однако для action=emailuser требуются запросы POST; Запросы GET вызовут ошибку.
Отправка электронного письма на User:Catrope
Результат
<?xml version="1.0" encoding="utf-8"?>
<api>
  <emailuser result="Success" />
</api>

Пример кода

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 );
} );

Возможные ошибки

В дополнение к обычным материалам:

Код Информация
cantsend Вы не авторизованы, ваш электронный адрес не подтверждён или у вас нет прав на отправку электронной почты другим участникам, поэтому вы не можете отправить электронное письмо.
blockedfrommail Отправка электронной почты была для вас заблокирована.
usermaildisabled Электронная почта пользователя была отключена
notarget ⧼apierror-notarget⧽
noemail Этот участник не указал действительный адрес электронной почты.
nowikiemail Этот участник указал, что не желает получать письма от других участников.

Проверка доступного статуса отправки по электронной почте

Прежде чем пытаться отправить электронное письмо, рекомендуется сначала проверить, есть ли у пользователя электронная почта. Для этого вы можете выполнить запрос списка для пользователя (или сразу нескольких пользователей одновременно). Вот пример использования 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' );
} );

Если вы тестируете клиентский скрипт, также можно просто проверить наличие элемента списка t-emailuser.

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]