{"id":19608903,"url":"https://github.com/forwardemail/python-arf","last_synced_at":"2026-05-09T07:02:13.608Z","repository":{"id":42367832,"uuid":"274073376","full_name":"forwardemail/python-arf","owner":"forwardemail","description":"Node.js wrapper around the Python package arf, which is a processor for Abuse Reporting Format (ARF) messages.","archived":false,"fork":false,"pushed_at":"2023-06-20T19:27:27.000Z","size":264,"stargazers_count":2,"open_issues_count":1,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-25T15:51:37.511Z","etag":null,"topics":["abuse","arf","bulk","email","format","formatting","javascript","json","message","messages","node","parse","parser","parsing","python","read","report","reporting"],"latest_commit_sha":null,"homepage":"https://forwardemail.net","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/forwardemail.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-06-22T07:48:28.000Z","updated_at":"2020-06-26T23:57:57.000Z","dependencies_parsed_at":"2022-09-12T11:01:20.126Z","dependency_job_id":null,"html_url":"https://github.com/forwardemail/python-arf","commit_stats":null,"previous_names":[],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forwardemail%2Fpython-arf","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forwardemail%2Fpython-arf/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forwardemail%2Fpython-arf/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/forwardemail%2Fpython-arf/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/forwardemail","download_url":"https://codeload.github.com/forwardemail/python-arf/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":240898274,"owners_count":19875151,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["abuse","arf","bulk","email","format","formatting","javascript","json","message","messages","node","parse","parser","parsing","python","read","report","reporting"],"created_at":"2024-11-11T10:18:31.183Z","updated_at":"2026-05-09T07:02:08.585Z","avatar_url":"https://github.com/forwardemail.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# python-arf\n\n[![build status](https://img.shields.io/travis/com/forwardemail/python-arf.svg)](https://travis-ci.com/forwardemail/python-arf)\n[![code coverage](https://img.shields.io/codecov/c/github/forwardemail/python-arf.svg)](https://codecov.io/gh/forwardemail/python-arf)\n[![code style](https://img.shields.io/badge/code_style-XO-5ed9c7.svg)](https://github.com/sindresorhus/xo)\n[![styled with prettier](https://img.shields.io/badge/styled_with-prettier-ff69b4.svg)](https://github.com/prettier/prettier)\n[![made with lass](https://img.shields.io/badge/made_with-lass-95CC28.svg)](https://lass.js.org)\n[![license](https://img.shields.io/github/license/forwardemail/python-arf.svg)](LICENSE)\n[![npm downloads](https://img.shields.io/npm/dt/python-arf.svg)](https://npm.im/python-arf)\n\n\u003e Node.js wrapper around the Python package arf, which is a processor for Abuse Reporting Format (ARF) messages.\n\n\n## Table of Contents\n\n* [Requirements](#requirements)\n* [Install](#install)\n* [Usage](#usage)\n* [Contributors](#contributors)\n* [License](#license)\n\n\n## Requirements\n\n1. Ensure that you have a Python version of \u003e= 3.5 installed (we do not support older versions of Python anymore across the entire organization):\n\n   ```sh\n   python3 --version\n   ```\n\n2. Install the package [arf](https://github.com/danielsen/arf):\n\n   ```sh\n   pip3 install arf-mime\n   ```\n\n\n## Install\n\n[npm][]:\n\n```sh\nnpm install python-arf\n```\n\n[yarn][]:\n\n```sh\nyarn add python-arf\n```\n\n\n## Usage\n\nNote that the `source` is an ARF message and can be a file path (String), String, or Buffer.\n\n```js\nconst arf = require('python-arf');\n\n// then/catch usage\narf(source)\n  .then(console.log)\n  .catch(console.error);\n\n// async/await usage\n(async () =\u003e {\n  try {\n    const result = await arf(source);\n    console.log(result);\n  } catch (err) {\n    console.error(err);\n  }\n})();\n```\n\nNote that `result` is an Object that looks like this:\n\n```js\n{\n  MessageHeaders: {\n    Received: [\n      'from example.com (example.com [10.0.1.11])    by example.net with ESMTP id O63d4137594e46; Thu, 08 Mar 2005 16:00:00 -0400',\n      'from mailserver.example.net (mailserver.example.net [192.0.2.1]) by example.com with ESMTP id M63d4137594e46; Thu, 08 Mar 2005 14:00:00 -0400'\n    ],\n    From: '\u003cabusedesk@example.com\u003e',\n    Date: 'Thu, 8 Mar 2005 17:40:36 EDT',\n    Subject: 'FW: Earn money',\n    To: '\u003cabuse@example.net\u003e',\n    MimeVersion: '1.0',\n    ContentType: 'multipart/report; report-type=feedback-report; boundary=\"part1_13d.2e68ed54_boundary\"'\n  },\n  OriginalMessageHeaders: {\n    From: '\u003csomespammer@example.net\u003e',\n    Received: 'from mailserver.example.net (mailserver.example.net [192.0.2.1]) by example.com with ESMTP id M63d4137594e46; Thu, 08 Mar 2005 14:00:00 -0400',\n    To: '\u003cUndisclosed Recipients\u003e',\n    Subject: 'Earn money',\n    MimeVersion: '1.0',\n    ContentType: 'text/plain',\n    MessageId: '8787KJKJ3K4J3K4J3K4J3.mail@example.net',\n    Date: 'Thu, 02 Sep 2004 12:31:03 -0500'\n  },\n  FeedbackReport: {\n    FeedbackType: 'abuse',\n    UserAgent: 'SomeGenerator/1.0',\n    Version: '1',\n    OriginalMailFrom: '\u003csomespammer@example.net\u003e',\n    OriginalRcptTo: '\u003cuser@example.com\u003e',\n    ArrivalDate: 'Thu, 8 Mar 2005 14:00:00 EDT',\n    ReportingMta: 'dns; mail.example.com',\n    SourceIp: '192.0.2.1',\n    AuthenticationResults: 'mail.example.com; spf=fail smtp.mail=somespammer@example.com',\n    ReportedDomain: 'example.net',\n    ReportedUri: [ 'http://example.net/earn_money.html', 'mailto:user@example.com' ],\n    RemovalRecipient: 'user@example.com'\n  },\n  OriginalMessagePayload: 'From: \u003csomespammer@example.net\u003e\\n' +\n    'Received: from mailserver.example.net (mailserver.example.net\\n' +\n    '\\t[192.0.2.1]) by example.com with ESMTP id M63d4137594e46;\\n' +\n    '\\tThu, 08 Mar 2005 14:00:00 -0400\\n' +\n    'To: \u003cUndisclosed Recipients\u003e\\n' +\n    'Subject: Earn money\\n' +\n    'MIME-Version: 1.0\\n' +\n    'Content-type: text/plain\\n' +\n    'Message-ID: 8787KJKJ3K4J3K4J3K4J3.mail@example.net\\n' +\n    'Date: Thu, 02 Sep 2004 12:31:03 -0500\\n' +\n    '\\n' +\n    'Spam Spam Spam\\n' +\n    'Spam Spam Spam\\n' +\n    'Spam Spam Spam\\n' +\n    'Spam Spam Spam'\n}\n```\n\nTherefore if you wanted to access the original message payload in the ARF report (which is what we needed to do in [Forward Email](https://forwardemail.net), then you'd retrieve it via `result.OriginalMessagePayload`.\n\n\n## Contributors\n\n| Name           | Website                    |\n| -------------- | -------------------------- |\n| **Nick Baugh** | \u003chttp://niftylettuce.com/\u003e |\n\n\n## License\n\n[MIT](LICENSE) © [Nick Baugh](http://niftylettuce.com/)\n\n\n## \n\n[npm]: https://www.npmjs.com/\n\n[yarn]: https://yarnpkg.com/\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fforwardemail%2Fpython-arf","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fforwardemail%2Fpython-arf","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fforwardemail%2Fpython-arf/lists"}