<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.open-xchange.com/wiki/index.php?action=history&amp;feed=atom&amp;title=HTTP_API_Examples</id>
	<title>HTTP API Examples - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.open-xchange.com/wiki/index.php?action=history&amp;feed=atom&amp;title=HTTP_API_Examples"/>
	<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=HTTP_API_Examples&amp;action=history"/>
	<updated>2026-09-29T06:34:04Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.7</generator>
	<entry>
		<id>https://wiki.open-xchange.com/wiki/index.php?title=HTTP_API_Examples&amp;diff=7657&amp;oldid=prev</id>
		<title>Choeger: Created page with &quot;= Code examples on how to access the Open-Xchange HTTP API  =  == Accessing EMails ==  This example accesses the HTTP API to list mails in the users inbox. It must run in the sam...&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.open-xchange.com/wiki/index.php?title=HTTP_API_Examples&amp;diff=7657&amp;oldid=prev"/>
		<updated>2011-04-15T11:51:25Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;= Code examples on how to access the Open-Xchange HTTP API  =  == Accessing EMails ==  This example accesses the HTTP API to list mails in the users inbox. It must run in the sam...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;= Code examples on how to access the Open-Xchange HTTP API  =&lt;br /&gt;
&lt;br /&gt;
== Accessing EMails ==&lt;br /&gt;
&lt;br /&gt;
This example accesses the HTTP API to list mails in the users inbox. It must run in the same domain as the Open-Xchange server.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE html PUBLIC &amp;quot;-//W3C//DTD XHTML 1.0 Strict//EN&amp;quot; &amp;quot;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;html xmlns=&amp;quot;http://www.w3.org/1999/xhtml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;head&amp;gt;&lt;br /&gt;
&amp;lt;meta http-equiv=&amp;quot;Content-Type&amp;quot; content=&amp;quot;text/html; charset=UTF-8&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;Mail Example&amp;lt;/title&amp;gt;&lt;br /&gt;
&amp;lt;style type=&amp;quot;text/css&amp;quot;&amp;gt;&lt;br /&gt;
body {&lt;br /&gt;
    padding: 10px;&lt;br /&gt;
}&lt;br /&gt;
.inbox {&lt;br /&gt;
    width: 400px;&lt;br /&gt;
    overflow: visible;&lt;br /&gt;
}&lt;br /&gt;
.mail {&lt;br /&gt;
    position: relative;&lt;br /&gt;
    border-bottom: 1px solid #ccc;&lt;br /&gt;
    white-space: nowrap;&lt;br /&gt;
    font-size: 10pt;&lt;br /&gt;
    line-height: 1.3333em;&lt;br /&gt;
    height: 6.5em;&lt;br /&gt;
}&lt;br /&gt;
.mail &amp;gt; div {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 0.75em;&lt;br /&gt;
    right: 1em;&lt;br /&gt;
    bottom: 0.75em;&lt;br /&gt;
    left: 1em;&lt;br /&gt;
}&lt;br /&gt;
.mail:hover {&lt;br /&gt;
    background-color: #f5f5f5;&lt;br /&gt;
}&lt;br /&gt;
.ellipsis {&lt;br /&gt;
    overflow: hidden;&lt;br /&gt;
    text-overflow: ellipsis;&lt;br /&gt;
}&lt;br /&gt;
.from {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 0;&lt;br /&gt;
    width: 60%;&lt;br /&gt;
    font-size: 12pt;&lt;br /&gt;
}&lt;br /&gt;
.date {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 0;&lt;br /&gt;
    left: 60%;&lt;br /&gt;
    width: 40%;&lt;br /&gt;
    text-align: right;&lt;br /&gt;
    color: #06c;&lt;br /&gt;
    font-size: 9pt;&lt;br /&gt;
}&lt;br /&gt;
.subject {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 1.6em;&lt;br /&gt;
    width: 100%;&lt;br /&gt;
    font-size: 9pt;&lt;br /&gt;
}&lt;br /&gt;
.teaser {&lt;br /&gt;
    position: absolute;&lt;br /&gt;
    top: 3em;&lt;br /&gt;
    height: 2em;&lt;br /&gt;
    line-height: 1em;&lt;br /&gt;
    color: #555;&lt;br /&gt;
    font-weight: normal;&lt;br /&gt;
    white-space: normal;&lt;br /&gt;
}&lt;br /&gt;
.teaser &amp;gt; span {&lt;br /&gt;
    font-size: 9pt;&lt;br /&gt;
}&lt;br /&gt;
.unread {&lt;br /&gt;
    font-weight: bold;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
$(document).ready(function () {&lt;br /&gt;
&lt;br /&gt;
    var ajaxRoot = &amp;quot;/ajax&amp;quot;, // should always be this one&lt;br /&gt;
        client = &amp;quot;com.openexchange.ox.gui.dhtml&amp;quot;, // must match UI (affects cookie handling)&lt;br /&gt;
        session = &amp;quot;&amp;quot;; // we get this with first autologin request&lt;br /&gt;
        &lt;br /&gt;
    // set default content type - we speak JSON all the time&lt;br /&gt;
    $.ajaxSetup({ dataType: &amp;quot;json&amp;quot; });&lt;br /&gt;
&lt;br /&gt;
    // helper to convert arrays into key-value objects&lt;br /&gt;
    function makeObjects(list, columns) {&lt;br /&gt;
        var i = 0, $i = list.length, tmp = [], arr, obj, j, $j;&lt;br /&gt;
        for (; i &amp;lt; $i; i++) {&lt;br /&gt;
            arr = list[i];&lt;br /&gt;
            obj = {};&lt;br /&gt;
            for (j = 0, $j = arr.length; j &amp;lt; $j; j++) {&lt;br /&gt;
                obj[columns[j]] = arr[j];&lt;br /&gt;
            }&lt;br /&gt;
            tmp.push(obj);&lt;br /&gt;
        }&lt;br /&gt;
        return tmp;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function drawLoginButton() {&lt;br /&gt;
        $(&amp;quot;#inbox&amp;quot;).hide();&lt;br /&gt;
        $(&amp;quot;#form&amp;quot;).show();&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function getTeaser(folder, id, node) {&lt;br /&gt;
        // get mail text (plain/text)&lt;br /&gt;
        $.ajax({&lt;br /&gt;
            url: ajaxRoot + &amp;quot;/mail?&amp;quot; + $.param({&lt;br /&gt;
                action: &amp;quot;get&amp;quot;, folder: folder, id: id, unseen: &amp;quot;true&amp;quot;, view: &amp;quot;text&amp;quot;,&lt;br /&gt;
                session: session&lt;br /&gt;
            })&lt;br /&gt;
        })&lt;br /&gt;
        .done(function (r) {&lt;br /&gt;
            try {&lt;br /&gt;
                // show first lines...&lt;br /&gt;
                var text = $(&amp;quot;&amp;lt;span/&amp;gt;&amp;quot;).html(r.data.attachments[0].content).get(0);&lt;br /&gt;
                node.text((text.innerText || text.textContent).substr(0, 200));&lt;br /&gt;
            } catch (e) {&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function drawInbox(list) {&lt;br /&gt;
&lt;br /&gt;
        var node = $(&amp;quot;&amp;lt;div/&amp;gt;&amp;quot;).addClass(&amp;quot;inbox&amp;quot;),&lt;br /&gt;
            getDate = function (d) {&lt;br /&gt;
                d = new Date();&lt;br /&gt;
                return d.getDate() + &amp;quot;.&amp;quot; + (d.getMonth() + 1) + &amp;quot;.&amp;quot; + d.getFullYear();&lt;br /&gt;
            };&lt;br /&gt;
        &lt;br /&gt;
        // loop over mails&lt;br /&gt;
        $.each(list, function (i, mail) {&lt;br /&gt;
&lt;br /&gt;
            var unread = (mail.flags &amp;amp; 32) === 0,&lt;br /&gt;
                teaser;&lt;br /&gt;
            &lt;br /&gt;
            node.append(&lt;br /&gt;
                $(&amp;quot;&amp;lt;div/&amp;gt;&amp;quot;)&lt;br /&gt;
                .addClass(&lt;br /&gt;
                    &amp;quot;mail&amp;quot; + (i % 2 ? &amp;quot; odd&amp;quot; : &amp;quot;&amp;quot;)&lt;br /&gt;
                    + (unread ? &amp;quot; unread&amp;quot; : &amp;quot;&amp;quot;)&lt;br /&gt;
                )&lt;br /&gt;
                .append(&lt;br /&gt;
                    $(&amp;quot;&amp;lt;div/&amp;gt;&amp;quot;)&lt;br /&gt;
                    .append(&lt;br /&gt;
                        $(&amp;quot;&amp;lt;div/&amp;gt;&amp;quot;)&lt;br /&gt;
                        .addClass(&amp;quot;from ellipsis&amp;quot;)&lt;br /&gt;
                        .append(&lt;br /&gt;
                            $(&amp;quot;&amp;lt;span/&amp;gt;&amp;quot;)&lt;br /&gt;
                            .text((mail.from[0][0] || mail.from[0][1]).replace(/&amp;quot;|&amp;#039;/g, &amp;quot;&amp;quot;))&lt;br /&gt;
                        )&lt;br /&gt;
                    )&lt;br /&gt;
                    .append(&lt;br /&gt;
                        $(&amp;quot;&amp;lt;div/&amp;gt;&amp;quot;)&lt;br /&gt;
                        .addClass(&amp;quot;date ellipsis&amp;quot;)&lt;br /&gt;
                        .text(getDate(mail.received_date))&lt;br /&gt;
                    )&lt;br /&gt;
                    .append(&lt;br /&gt;
                        $(&amp;quot;&amp;lt;div/&amp;gt;&amp;quot;)&lt;br /&gt;
                        .addClass(&amp;quot;subject ellipsis&amp;quot;)&lt;br /&gt;
                        .text(mail.subject)&lt;br /&gt;
                    )&lt;br /&gt;
                    .append(&lt;br /&gt;
                        $(&amp;quot;&amp;lt;div/&amp;gt;&amp;quot;).append(teaser = $(&amp;quot;&amp;lt;span/&amp;gt;&amp;quot;))&lt;br /&gt;
                        .addClass(&amp;quot;teaser ellipsis&amp;quot;)&lt;br /&gt;
                    )&lt;br /&gt;
                )&lt;br /&gt;
            )&lt;br /&gt;
            &lt;br /&gt;
            // get teaser text&lt;br /&gt;
            getTeaser(mail.folder, mail.id, teaser);&lt;br /&gt;
        });&lt;br /&gt;
        &lt;br /&gt;
        $(&amp;quot;#form&amp;quot;).hide();&lt;br /&gt;
        $(&amp;quot;#inbox&amp;quot;).empty().append(node)&lt;br /&gt;
            .append(&lt;br /&gt;
                $(&amp;quot;&amp;lt;input/&amp;gt;&amp;quot;, { type: &amp;quot;button&amp;quot;, value: &amp;quot;Logout&amp;quot; })&lt;br /&gt;
                .css(&amp;quot;margin&amp;quot;, &amp;quot;1em&amp;quot;)&lt;br /&gt;
                .click(logout)&lt;br /&gt;
            )&lt;br /&gt;
            .show();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function getInbox() {&lt;br /&gt;
&lt;br /&gt;
        // continuation&lt;br /&gt;
        function getMailHeaders(list) {&lt;br /&gt;
            // get first mails&lt;br /&gt;
            // for columns see http://oxpedia.org/index.php?title=HTTP_API#Module_.22mail.22&lt;br /&gt;
            var count = 7;&lt;br /&gt;
            $.ajax({&lt;br /&gt;
                type: &amp;quot;PUT&amp;quot;,&lt;br /&gt;
                url: ajaxRoot + &amp;quot;/mail?&amp;quot; + $.param({&lt;br /&gt;
                    action: &amp;quot;list&amp;quot;, columns: &amp;quot;600,601,603,607,610,611,655&amp;quot;,&lt;br /&gt;
                    session: session&lt;br /&gt;
                }),&lt;br /&gt;
                data: JSON.stringify(list.slice(0, count))&lt;br /&gt;
            })&lt;br /&gt;
            .done(function (response) {&lt;br /&gt;
                if (response.error) {&lt;br /&gt;
                    drawLoginButton();&lt;br /&gt;
                } else {&lt;br /&gt;
                    drawInbox(makeObjects(response.data, [&amp;quot;id&amp;quot;, &amp;quot;folder&amp;quot;, &amp;quot;from&amp;quot;, &amp;quot;subject&amp;quot;, &amp;quot;received_date&amp;quot;, &amp;quot;flags&amp;quot;, &amp;quot;attachments&amp;quot;]));&lt;br /&gt;
                }&lt;br /&gt;
            });&lt;br /&gt;
        }&lt;br /&gt;
        &lt;br /&gt;
        $.ajax({&lt;br /&gt;
            // get all mails in INBOX (id &amp;amp; folder_id only; do not fetch mail headers -&amp;gt; slow!)&lt;br /&gt;
            // folder is &amp;quot;default0/INBOX&amp;quot;. assumption: IMAP path prefix is &amp;quot;/&amp;quot;&lt;br /&gt;
            url: ajaxRoot + &amp;quot;/mail?&amp;quot; + $.param({&lt;br /&gt;
                action: &amp;quot;all&amp;quot;, columns: &amp;quot;600,601&amp;quot;,&lt;br /&gt;
                folder: &amp;quot;default0/INBOX&amp;quot;, session: session,&lt;br /&gt;
                sort: &amp;quot;610&amp;quot;, order: &amp;quot;desc&amp;quot; // order by received_date&lt;br /&gt;
            })&lt;br /&gt;
        })&lt;br /&gt;
        .done(function (response) {&lt;br /&gt;
            // API error, e.g. session not found?&lt;br /&gt;
            if (response.error) {&lt;br /&gt;
                drawLoginButton();&lt;br /&gt;
            } else {&lt;br /&gt;
                // continue&lt;br /&gt;
                // response.data contains array of id/folder_id pairs.&lt;br /&gt;
                // we convert this to key/value objects because it&amp;#039;s easier to write and&lt;br /&gt;
                // debug code that way (obj.folder_id instead of obj[1]).&lt;br /&gt;
                getMailHeaders(makeObjects(response.data, [&amp;quot;id&amp;quot;, &amp;quot;folder&amp;quot;]));&lt;br /&gt;
            }&lt;br /&gt;
        })&lt;br /&gt;
        .error(drawLoginButton); // general network error&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    function autoLogin() {&lt;br /&gt;
        // auto login to get session id -- must be activated on server!&lt;br /&gt;
        $.ajax({&lt;br /&gt;
            url: ajaxRoot + &amp;quot;/login?&amp;quot; + $.param({&lt;br /&gt;
                action: &amp;quot;autologin&amp;quot;, client: client&lt;br /&gt;
            })&lt;br /&gt;
        })&lt;br /&gt;
        .done(function (response) {&lt;br /&gt;
            if (response.error) {&lt;br /&gt;
                drawLoginButton();&lt;br /&gt;
            } else {&lt;br /&gt;
                // remember session id&lt;br /&gt;
                session = response.session;&lt;br /&gt;
                // get inbox&lt;br /&gt;
                getInbox();&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function login() {&lt;br /&gt;
        // Two steps:&lt;br /&gt;
        // Step #1: Login with username &amp;amp; password&lt;br /&gt;
        // Step #2: Pull special persistence cookie that allows auto-login&lt;br /&gt;
        $.ajax({&lt;br /&gt;
            type: &amp;quot;POST&amp;quot;,&lt;br /&gt;
            url: ajaxRoot + &amp;quot;/login?&amp;quot; + $.param({&lt;br /&gt;
                action: &amp;quot;login&amp;quot;,&lt;br /&gt;
                client: client&lt;br /&gt;
            }),&lt;br /&gt;
            data: $.param({&lt;br /&gt;
                password: $(&amp;quot;#password&amp;quot;).val(),&lt;br /&gt;
                name: $(&amp;quot;#name&amp;quot;).val()&lt;br /&gt;
            }),&lt;br /&gt;
        })&lt;br /&gt;
        .done(function (response) {&lt;br /&gt;
            if (response.session) {&lt;br /&gt;
                // store cookie for future autologin requests&lt;br /&gt;
                $.ajax({&lt;br /&gt;
                    type: &amp;quot;GET&amp;quot;,&lt;br /&gt;
                    url: ajaxRoot + &amp;quot;/login?&amp;quot; + $.param({&lt;br /&gt;
                        action: &amp;quot;store&amp;quot;,&lt;br /&gt;
                        session: (session = response.session)&lt;br /&gt;
                    })&lt;br /&gt;
                })&lt;br /&gt;
                .done(getInbox)&lt;br /&gt;
            }&lt;br /&gt;
        });&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    function logout() {&lt;br /&gt;
        $.ajax({&lt;br /&gt;
            type: &amp;quot;GET&amp;quot;,&lt;br /&gt;
            url: ajaxRoot + &amp;quot;/login?&amp;quot; + $.param({&lt;br /&gt;
                action: &amp;quot;logout&amp;quot;,&lt;br /&gt;
                client: client,&lt;br /&gt;
                session: session&lt;br /&gt;
            })&lt;br /&gt;
        })&lt;br /&gt;
        .done(function () {&lt;br /&gt;
            session = &amp;quot;&amp;quot;;&lt;br /&gt;
            drawLoginButton();&lt;br /&gt;
        });&lt;br /&gt;
        return false;&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    $(&amp;quot;#form&amp;quot;).submit(login);&lt;br /&gt;
&lt;br /&gt;
    autoLogin();&lt;br /&gt;
});&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/head&amp;gt;&lt;br /&gt;
&amp;lt;body&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;form&amp;quot; style=&amp;quot;display: none&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;form action=&amp;quot;&amp;quot; name=&amp;quot;OX6.UI&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;text&amp;quot; id=&amp;quot;name&amp;quot; name=&amp;quot;name&amp;quot; value=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;password&amp;quot; id=&amp;quot;password&amp;quot; name=&amp;quot;password&amp;quot; value=&amp;quot;&amp;quot;/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
        &amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Login&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;inbox&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/body&amp;gt;&lt;br /&gt;
&amp;lt;/html&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Choeger</name></author>
	</entry>
</feed>