strato webmail abwesenheitsnachricht via php setzen

Bannister0946

Lt. Junior Grade
Registriert
Nov. 2021
Beiträge
315
Nabend!

ich suche aktuell nach einer Lösung, um mit PHP meine Abwesenheitsnachricht bei Strato Webmail zu setzen.
Habe die Entwicklerkonsole von firefox offen gelassen und habe mir die Anfragen während des Logins und des aktivieren der Abwesenheitsnachricht angesehen.

Habe daraus folgenden Curl nachgebaut:

### Login ###
PHP:
function startCurl$parameter) {

    $ch = curl_init('https://webmail.strato.de/appsuite/api/login');
    curl_setopt($ch, CURLOPT_POST, TRUE);
    curl_setopt($ch, CURLOPT_HEADER, FALSE);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE);
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2TLS);
    curl_setopt($ch, CURLOPT_ENCODING, '');
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parameter));
    curl_setopt($ch, CURLOPT_HTTPHEADER,
        array (
            'Content-Type: application/x-www-form-urlencoded'
        ),
    );
    
    $response = json_decode(curl_exec($ch), true);
    curl_close($ch);
    return $response;
}


$login = startCurl(null, array(
    'action'                       =>    'login',
    'name'                        =>    $username,
    'password'                 =>    $password,
    'staySignedIn'            =>    true
));


echo '<pre>';
print_r($login);
echo '</pre>';


Resultat:
Array
(
[session] => XXXX
[user] => XXX
[user_id] => 9
[context_id] => 52515441
[locale] => de_DE
)

Sieht ja erst mal nicht schlecht aus.



### Abwesenheitsnachricht setzen ###

PHP:
function setCurl() {
    
    global $login;
    
    $ch = curl_init('https://webmail.strato.de/appsuite/api/mailfilter/v2?action=update&session='.$login["session"]);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
    curl_setopt($ch, CURLOPT_HEADER, FALSE);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 10);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE);
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_2TLS);
    curl_setopt($ch, CURLOPT_ENCODING, '');
    #curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($parameter));
    curl_setopt($ch, CURLOPT_POSTFIELDS, "{\"active\":true,\"actioncmds\":[{\"days\":\"1\",\"subject\":\"Mein Betreff\",\"text\":\"Meine Nachrichtrnmit Zeilenumbruch\",\"id\":\"vacation\",\"addresses\":[\"mail@meineDomain.de\"]}],\"test\":{\"id\":\"allof\",\"tests\":[{\"id\":\"currentdate\",\"comparison\":\"ge\",\"datepart\":\"date\",\"datevalue\":[1686268800000],\"zone\":\"+0200\"},{\"id\":\"currentdate\",\"comparison\":\"le\",\"datepart\":\"date\",\"datevalue\":[1689120000000],\"zone\":\"+0200\"}]},\"flags\":[\"vacation\"],\"rulename\":\"Abwesenheitsbenachrichtigung\",\"position\":0,\"id\":5}");
    curl_setopt($ch, CURLOPT_HTTPHEADER,
        array (
            'Content-Type: application/x-www-form-urlencoded'
        ),
    );
    
    $response = json_decode(curl_exec($ch), true);
    curl_close($ch);
    return $response;
}

$set = setCurl();

echo '<pre>';
print_r($set);
echo '</pre>';

Das leider nicht so erfolgreiche Resultat:
PHP:
Array
(
    [error] => Your session expired. Please login again.
    [error_params] => Array
        (
            [0] => XXX
        )

    [categories] => TRY_AGAIN
    [category] => 4
    [code] => SES-0203
    [error_id] => 967560772-59999975
    [error_desc] => Your session XXX expired. Please start a new browser session.
)


Jemand eine Idee, wie ich das Thema realisieren kann?
 
Gibt es vielleicht noch irgendwelche Cookies, die für die Session notwendig sind?
 
MÖGLICH!
Mit cookies und curls kenn ich mich aber leider bislang nicht aus.
Wie oder was kann ich für die weitere Analyse machen?
 
In der Entwicklerkonsole hast du bei einem Request den Tab Cookies. Schau da mal rein.

Cookies sind sowohl beim setzen als auch beim an den Server senden einfach HTTP-Header.
Apropo Header: Eventuell fehlt dir hier auch ein Authorization Header o.Ä.
 
ja dort gibt es mehrere cookies:

JSESSIONID
url.key
und 4 open-xchange-...
 
Da haben wir es doch. JSESSIONID hört sich an, als wäre es notwendig.
 
Da bin ich überfragt was die konkrete Implementierung angeht. Habe nie wirklich mit PHP gearbeitet.

Aber grob: Bei der Response den Header "Set-Cookie" auslesen (oder fertig tools von PHP fürs parsen nutzen, falls vorhanden). Bei der zweiten Request dann den Header "Cookie" mit den zuvor erhaltenen Werten füllen.

Könntest mal nach "PHP Cookie-Jar" oder ähnlich suchen. Damit findest du eventuell ein automatisches Cookie-Management.

EDIT: PHP Curl kann das direkt:
https://curl.se/libcurl/c/CURLOPT_COOKIEJAR.html
https://www.etutorialspoint.com/index.php/199-php-curl-cookie-jar
 
Zurück
Oben