User: сдела йн апитоне код который о задет почту и ждет письма и почту цдает пне в консоль и ссылки из письма тоде Mail.tm API DocumentationMail.tm API Documentation

Temp Mail API
API for creating temporary email accounts

Welcome to the Mail.tm API documentation.

This API allows you to automate the registration process at the various sites which do require email confirmation for testing purposes.

Usage of our API for illegal activity is strictly prohibited.
It is forbidden to sell programs and/or earn from it that exclusively uses our API (for example, creating a competing temp mail client and charging for it's usage is not allowed).
Creating a mirror proxy service that explicitly utilizes our API is not allowed (for example, creating a proxy service under another domain name and then returning the results of the API).
If you are developing an wrapper and/or application that utilizes our API, you are required to explicitly mention that you are using Mail.tm by including a link to our main site as this would appreacited and make our service more popular.
Access to the API
Available completely free of charge and without restriction.

The general quota limit is 8 queries per second (QPS) per IP address.
Keep in mind that no API keys are required to use our service.
How it works
Fetch our domain names.
Create a new account by using our domain names.
Sign up only on sites that you have acquired permission to.
The site sends an email message to the address you specify.
A message comes to our SMTP server, processed and added to the database.
You make a request to the API to fetch the message list.
That's it.
General information
The Mail.tm API specification documentation is written using the OpenAPI Specification v3.

You can download the file here and test it here.

Integrations
Language	Link
.NET	https://github.com/SmorcIRL/mail.tm
Dart	https://pub.dev/packages/mailtm_client
Golang	https://github.com/felixstrobel/mailtm, https://github.com/msuny-c/mailtm
Java	https://github.com/shivam1608/JMailTM
JavaScript	https://github.com/cemalgnlts/Mailjs
PHP	https://github.com/heithemmoumni/mail.tm
Python	https://github.com/CarloDePieri/pymailtm, https://github.com/prtolem/MailTM, https://github.com/RPwnage/MailTMClient
Rust	https://github.com/AwesomeIbex/mail-tm-rs
Swift	https://github.com/devwaseem/MailTMSwift
We would appreciate any legal integrations to make usage of our service, please let us know to be added to the list.

API Documentation
Base url: https://api.mail.tm

Error handling
Successful
Generally, the request is successful when the response code is 200, 201 or 204 (You could also check if the code is between 200 and 204)

Unsuccessful
Usually, when the request has an error the code is between 400 and 430.

Bad request 400: Something in your payload is missing! Or, the payload isn't there at all.

Unauthorized 401: Your token isn't correct (Or the headers hasn't a token at all!). Remember, every request (Except POST /accounts and POST /token) should be authenticated with a Bearer token!

Not found 404: You're trying to access an account that doesn't exist? Or maybe reading a non-existing message? Go check that!

Method not allowed 405: Maybe you're trying to GET a /token or POST a /messages. Check the path you're trying to make a request to and check if the method is the correct one.

I'm a teapot 418: Who knows? Maybe the server becomes a teapot!

Unprocessable entity 422: Some went wrong on your payload. Like, the username of the address while creating the account isn't long enough, or, the account's domain isn't correct. Things like that.

Too many requests 429: You exceeded the limit of 8 requests per second! Try delaying the request by one second!

Authentication
To make any request (Except for account creation and /domains requests) you need to authenticate the request with a bearer token.

How to get it?

You need to make a POST request to the /token path.

Body

Name	Type	Description
address	string	Account's address. Example: user@example.com
password	string	Account's password.
Params

None

Response

{
  "id": "string",
  "token":"string"
}
Use this token as

"Authorization":"Bearer TOKEN"
In every request!

Remember: You should first create the account and then get the token!***
Domain
GET /domains
You have to use this when creating an account, to retrieve the domain. Returns a list of domains

Body

None

Params

Name	Type	Description
page	int	The collection page number
Response

{
  "hydra:member": [
    {
      "@id": "string",
      "@type": "string",
      "@context": "string",
      "id": "string",
      "domain": "string",
      "isActive": true,
      "isPrivate": true,
      "createdAt": "2022-04-01T00:00:00.000Z",
      "updatedAt": "2022-04-01T00:00:00.000Z"
    }
  ],
  "hydra:totalItems": 0,
  "hydra:view": {
    "@id": "string",
    "@type": "string",
    "hydra:first": "string",
    "hydra:last": "string",
    "hydra:previous": "string",
    "hydra:next": "string"
  },
  "hydra:search": {
    "@type": "string",
    "hydra:template": "string",
    "hydra:variableRepresentation": "string",
    "hydra:mapping": [
      {
        "@type": "string",
        "variable": "string",
        "property": "string",
        "required": true
      }
    ]
  }
}
When you create an email, you have to know first which domain to use.

You'll need to retrieve the domain, and then, do like so:

"user@"+domains[0]['domain']
There are up to 30 domains per page, to check the total number, retrieve it from "hydra:totalItems"

GET /domains/{id}
Retrieve a domain by its id (Useful for deleted/private domains)

Body

None

Params

Name	Type	Description
id	string	The domain you want to get with id
Response

{
  "@id": "string",
  "@type": "string",
  "@context": "string",
  "id": "string",
  "domain": "string",
  "isActive": true,
  "isPrivate": true,
  "createdAt": "2022-04-01T00:00:00.000Z",
  "updatedAt": "2022-04-01T00:00:00.000Z"
}

Account
POST /accounts
Creates an Account resource (Registration)

Body

Name	Type	Description
address	string	Account's address. Example: user@example.com
password	string	Account's password.
Params

None

Response

{
  "@context": "string",
  "@id": "string",
  "@type": "string",
  "id": "string",
  "address": "user@example.com",
  "quota": 0,
  "used": 0,
  "isDisabled": true,
  "isDeleted": true,
  "createdAt": "2022-04-01T00:00:00.000Z",
  "updatedAt": "2022-04-01T00:00:00.000Z"
}
At this point, you could now get the token and do all the cool stuff you want to do.

GET /accounts/{id}
Get an Account resource by its id (Obviously, the Bearer token needs to be the one of the account you are trying to retrieve)

Body

None

Params

Name	Type	Description
id	string	The message you want to gets id
Response

{
  "@context": "string",
  "@id": "string",
  "@type": "string",
  "id": "string",
  "address": "user@example.com",
  "quota": 0,
  "used": 0,
  "isDisabled": true,
  "isDeleted": true,
  "createdAt": "2022-04-01T00:00:00.000Z",
  "updatedAt": "2022-04-01T00:00:00.000Z"
}
Can we improve this? Yes No

DELETE /accounts/{id}
Deletes the Account resource.
Be careful! We can't restore your account, if you use this method, bye bye dear account :c

Body

None

Params

Name	Type	Description
id	string	The account you want to delete by id
Response

None (Returns status code 204 if successful.)

Can we improve this? Yes No

GET /me
Returns the Account resource that matches the Bearer token that sent the request.

Body

None

Params

None

Response

{
  "@context": "string",
  "@id": "string",
  "@type": "string",
  "id": "string",
  "address": "user@example.com",
  "quota": 0,
  "used": 0,
  "isDisabled": true,
  "isDeleted": true,
  "createdAt": "2022-04-01T00:00:00.000Z",
  "updatedAt": "2022-04-01T00:00:00.000Z"
}
Messages
GET /messages
Gets all the Message resources of a given page.

Body

None

Params

Name	Type	Description
page	int	The collection page number
Response

{
  "hydra:member": [
    {
      "@id": "string",
      "@type": "string",
      "@context": "string",
      "id": "string",
      "accountId": "string",
      "msgid": "string",
      "from": {
          "name": "string",
          "address": "string"
      },
      "to": [
        {
            "name": "string",
            "address": "string"
        }
      ],
      "subject": "string",
      "intro": "string",
      "seen": true,
      "isDeleted": true,
      "hasAttachments": true,
      "size": 0,
      "downloadUrl": "string",
      "createdAt": "2022-04-01T00:00:00.000Z",
      "updatedAt": "2022-04-01T00:00:00.000Z"
    }
  ],
  "hydra:totalItems": 0,
  "hydra:view": {
    "@id": "string",
    "@type": "string",
    "hydra:first": "string",
    "hydra:last": "string",
    "hydra:previous": "string",
    "hydra:next": "string"
  },
  "hydra:search": {
    "@type": "string",
    "hydra:template": "string",
    "hydra:variableRepresentation": "string",
    "hydra:mapping": [
      {
        "@type": "string",
        "variable": "string",
        "property": "string",
        "required": true
      }
    ]
  }
}
There are up to 30 messages per page, to check the total number, retrieve it from "hydra:totalItems"

GET /messages/{id}
Retrieves a Message resource with a specific id (It has way more information than a message retrieved with GET /messages but it hasn't the "intro" member)

Body

None

Params

Name	Type	Description
id	string	The message you want to get by id
Response

{
  "@context": "string",
  "@id": "string",
  "@type": "string",
  "id": "string",
  "accountId": "string",
  "msgid": "string",
    "from": {
        "name": "string",
      "address": "string"
  },
  "to": [
        {
            "name": "string",
            "address": "string"
        }
    ],
  "cc": [
    "string"
  ],
  "bcc": [
    "string"
  ],
  "subject": "string",
  "seen": true,
  "flagged": true,
  "isDeleted": true,
  "verifications": [
    "string"
  ],
  "retention": true,
  "retentionDate": "2022-04-01T00:00:00.000Z",
  "text": "string",
  "html": [
    "string"
  ],
  "hasAttachments": true,
  "attachments": [
    {
      "id": "string",
      "filename": "string",
      "contentType": "string",
      "disposition": "string",
      "transferEncoding": "string",
      "related": true,
      "size": 0,
      "downloadUrl": "string"
    }
  ],
  "size": 0,
  "downloadUrl": "string",
  "createdAt": "2022-04-01T00:00:00.000Z",
  "updatedAt": "2022-04-01T00:00:00.000Z"
}
DELETE /messages/{id}
Deletes the Message resource.

Body

None

Params

Name	Type	Description
id	string	The message you want to delete's id
Response

None (Returns status code 204 if successful.)

PATCH /messages/{id}
Marks a Message resource as read!

Body

None

Params

Name	Type	Description
id	string	The message you want to read's id
Response

{
  "seen": true
}
To check if the message has been read, you could also check if the status code is 200!

GET /sources/{id}
Gets a Message's Source resource (If you don't know what this is, you either don't really want to use it or you should read this!)

Body

None

Params

Name	Type	Description
id	string	The source you want to get by id
Response

{
  "@context": "string",
  "@id": "string",
  "@type": "string",
  "id": "string",
  "downloadUrl": "string",
  "data": "string"
}
You don't really need the downloadUrl if you already have the "data" String. It will simply download that data.

Attachments
Message's attachments need to be handled in a certain way. When you download them, be sure to download them in the right encoding (For example, a .exe file will need to be downloaded as an array of integers, but a json will need to be downloaded as String! Also, remember: API are friends. contentType member can help you know how to decode the file)

Webhooks
You might be interested in Webhooks to receive notifications when a new message is received. However, we don't utilize them in this project.

Instead, we're using the Mercure to send SSE events.

Listen to messages
To listen to messages you'll need a different base url.

Base url: https://mercure.mail.tm/.well-known/mercure
Topic: /accounts/{id}
Remember! You must use the `Bearer TOKEN` authorization in the headers!
For each listened message, there will be an Account event. That Account is the Account resource that received the message, with updated "used" property.

Questions and suggestions
If you have any questions or suggestions, please contact us via email <PRESIDIO_ANONYMIZED_EMAIL_ADDRESS>.

Tech stack
Our stack includes API-Platform, Mercure, Nuxt.js, Haraka, Caddy, MongoDB, Node.js, CentOS

Edit this page on GitHub
Updated at Tue, Sep 17, 2024
On this page
Access to the API
How it works
General information
Integrations
API Documentation
Error handling
Successful
Unsuccessful
Authentication
Domain
GET /domains
GET /domains/{id}
Account
POST /accounts
GET /accounts/{id}
DELETE /accounts/{id}
GET /me
Messages
GET /messages
GET /messages/{id}
DELETE /messages/{id}
PATCH /messages/{id}
GET /sources/{id}
Attachments
Webhooks
Listen to messages
Questions and suggestions
Tech stack

Написать
Cоставить
Ответить
Войти
Регистрация
Музыка
Видео
Сообщества
Мини-приложения
Игры
Приложение на телефон
Применяются рекомендательные технологии

Купи дешево. Компьютерные и прочие железки
вернуться к странице
Записи сообщества
Все записи
Поиск записей
Запись на стене

Максим Татарский
19 мар 2023
·
в Купи дешево. Компьютерные и прочие железки
Стал счастливым обладателем rx 6650 xt msi gaming x. Карта покупалась новой. При использовании столкнулся с тем что карта греется до 71° и вертушки работают на 50% (около 2000 об/мин.), Что несколько отличается от тестов на Ютубе. Корпус у меня закрытый versa h17, но все равно температуры несколько огорчают, хотелось видеть в районе 65 при оборотах до 1500. Решил сделать андервольт, и столкнулся с проблемой, что при стоковых частотах напряжение можно понизить только до 1150 мV, если ниже начинаются краши. При этом частота в стоке 2765. Вопрос: насколько можно понизить частоту, чтоб несильно потерять в производительности? Опасно ли для видеокарты понижение напряжения и частоты?

6
Нравится

Показать список поделившихся

Игорь Никулин
Амд изменила способ изменения температуры, по сравнению с картами на поколение ниже прибавляй 10 градусов
Показать список оценивших
19 мар 2023Поделиться

Максим Татарский·Автор
Игорь, пруфы есть? Как можно изменить способ измерения температуры?
1
Показать список оценивших
19 мар 2023Поделиться

Игорь Никулин ответил Максиму
Максим, раньше считала по датчику в хотпоинте, сейчас датчики в нескольких разных местах которые в основном греются и выводится максимум из этого
Показать список оценивших
19 мар 2023Поделиться

Данила Андреевич  ответил Игорю
Игорь, хотпоинт Аристон? Казалось бы, причем тут стиральная машина
1
Показать список оценивших
19 мар 2023Поделиться

Семён Якимов  ответил Даниле
Данила, хот-спот
1
Показать список оценивших
19 мар 2023Поделиться

Данила Андреевич  ответил Семёну
Семён, ну это я понял, а ты сарказма не понял
Показать список оценивших
19 мар 2023Поделиться

Семён Якимов  ответил Даниле
Данила, мне не за 30+ чтоб так шутить или выкупать такие шутки
Показать список оценивших
19 мар 2023Поделиться

Алексей Галямин
Лучше отнеси в ДНС и купи сапфир на 8 гигов мсай по охладу не очень.......и сапфир на 8 единственная на 8 6500 которая не упрется в память при случае чего а это значит что будет меньше обмен по шине и больше фпс в играх........8 гиговка по уровню производительности дотягивает до 1660 в играх......карту незаслуженно захейтили в инете но она раскрывается только на 8 гигах...разница в фпс там просто гиганская у 4 и 8 гиговой версии даже на PCI 3.0 тогда как 3 и 4 версии не особо влияют
Формат:
Эссе
Paragraph
Электронная почта
Idea
Blog Post
Контур
Marketing Ads
Comment
Message
Twitter
Tone:
🙂 Formal
😉 Повседневный
🧐 Professional
🤩 Enthusiastic
🤓 Informational
😄 Funny
Длина:
Short
Medium
Длинный
Язык:
Русский
Отправить (enter)
Оставьте отзыв и получите кредит ❤
Чат
Спросить
Поиск
Написать
Изображение
ChatPDF
Видение
Полная страница
Приглашай и Зарабатывай
Assistant: Конечно! Ниже представлен пример Python-кода, который использует API Mail.tm для создания временного email-адреса, ожидает получения писем и выводит их содержимое вместе со ссылками в консоль.

### Установка необходимых библиотек

Для работы этого скрипта потребуются библиотеки `requests` и `beautifulsoup4`. Установите их с помощью `pip`, если они у вас ещё не установлены:

```bash
pip install requests beautifulsoup4
```

### Полный код

```python
import requests
import time
import re
from bs4 import BeautifulSoup

API_BASE_URL = "https://api.mail.tm"

def get_domains():
    response = requests.get(f"{API_BASE_URL}/domains")
    response.raise_for_status()
    data = response.json()
    domains = [domain['domain'] for domain in data['hydra:member']]
    return domains

def create_account(address, password):
    payload = {
        "address": address,
        "password": password
    }
    response = requests.post(f"{API_BASE_URL}/accounts", json=payload)
    response.raise_for_status()
    return response.json()

def get_token(address, password):
    payload = {
        "address": address,
        "password": password
    }
    response = requests.post(f"{API_BASE_URL}/token", json=payload)
    response.raise_for_status()
    return response.json()['token']

def get_messages(token, page=1):
    headers = {
        "Authorization": f"Bearer {token}"
    }
    params = {
        "page": page
    }
    response = requests.get(f"{API_BASE_URL}/messages", headers=headers, params=params)
    response.raise_for_status()
    return response.json()

def get_message_content(token, message_id):
    headers = {
        "Authorization": f"Bearer {token}"
    }
    response = requests.get(f"{API_BASE_URL}/messages/{message_id}", headers=headers)
    response.raise_for_status()
    return response.json()

def extract_links(text):
    # Используем BeautifulSoup для извлечения ссылок из HTML
    soup = BeautifulSoup(text, "html.parser")
    links = [a.get('href') for a in soup.find_all('a', href=True)]
    # Также можно извлечь ссылки из простого текста с помощью регулярных выражений
    regex = r'(https?://\S+)'
    links += re.findall(regex, text)
    return links

def main():
    try:
        domains = get_domains()
        if not domains:
            print("Не удалось получить домены.")
            return

        # Создаём уникальный адрес (можно улучшить генерацию)
        address = f"user{int(time.time())}@{domains[0]}"
        password = "StrongPassword123!"

        print(f"Создаём аккаунт: {address}")

        create_account(address, password)
        print("Аккаунт создан.")

        token = get_token(address, password)
        print("Токен получен. Ожидание писем...")

        seen_message_ids = set()

        while True:
            messages_data = get_messages(token)
            messages = messages_data.get('hydra:member', [])

            for message in messages:
                msg_id = message['id']
                if msg_id not in seen_message_ids:
                    seen_message_ids.add(msg_id)
                    content = get_message_content(token, msg_id)
                    subject = content.get('subject', '(Без темы)')
                    from_addr = content.get('from', {}).get('address', '(Без отправителя)')
                    text = content.get('text', '')
                    html = ''.join(content.get('html', []))

                    print(f"\nПолучено новое письмо:")
                    print(f"От: {from_addr}")
                    print(f"Тема: {subject}")
                    print("Содержимое (текст):")
                    print(text)
                    print("Содержимое (HTML):")
                    print(html)

                    combined_content = text + html
                    links = extract_links(combined_content)
                    if links:
                        print("Найденные ссылки:")
                        for link in links:
                            print(link)
                    else:
                        print("Ссылок не найдено.")

            time.sleep(10)  # Ждём 10 секунд перед следующей проверкой

    except requests.HTTPError as http_err:
        print(f"HTTP ошибка произошла: {http_err}")
    except Exception as err:
        print(f"Произошла ошибка: {err}")

if __name__ == "__main__":
    main()
```

### Пояснение кода

1. **Получение доменов**: Сначала скрипт запрашивает доступные домены с помощью `GET /domains`.

2. **Создание аккаунта**: Используя выбранный домен, создаётся уникальный email-адрес. В примере используется текущее время для генерации уникального имени пользователя.

3. **Получение токена**: После создания аккаунта необходимо получить токен для аутентификации последующих запросов с помощью `POST /token`.

4. **Прослушивание входящих сообщений**: Скрипт периодически (каждые 10 секунд) проверяет наличие новых писем с помощью `GET /messages`. Если новое письмо обнаружено, оно выводится в консоль вместе с извлечёнными ссылками.

5. **Извлечение ссылок**: Используется библиотека `BeautifulSoup` для парсинга HTML-содержимого письма и извлечения ссылок. Также применён регулярное выражение для поиска ссылок в простом тексте.

### Запуск скрипта

1. Убедитесь, что у вас установлены все необходимые библиотеки:
   ```bash
   pip install requests beautifulsoup4
   ```

2. Сохраните код в файл, например, `mailtm_listener.py`.

3. Запустите скрипт:
   ```bash
   python mailtm_listener.py
   ```

### Примечания

- **Безопасность пароля**: Для демонстрационных целей пароль задаётся как `StrongPassword123!`. В реальных приложениях рекомендуется использовать более надёжные методы генерации и хранения паролей.

- **Обработка ошибок**: В коде предусмотрена базовая обработка HTTP-ошибок и других исключений. При необходимости можно расширить её для более детальной диагностики.

- **Улучшения**:
  - Добавить более изящную генерацию уникального адреса.
  - Реализовать возможность прекращения ожидания по команде пользователя.
  - Обрабатывать вложения в письмах, если это необходимо.

Этот скрипт должен предоставить базовую функциональность для взаимодействия с API Mail.tm, ожидания писем и извлечения ссылок из них. Вы можете адаптировать и расширять его в соответствии с вашими требованиями.
User: не выдает почтуPS C:\Users\Вадим> & C:/Users/Вадим/AppData/Local/Programs/Python/Python312/python.exe c:/Users/Вадим/Desktop/mine.py
Assistant: Извините за трудности, с которыми вы столкнулись. Давайте попробуем разобраться, почему скрипт не выводит ожидаемую почту. Ниже приведены шаги для отладки и возможные решения.

### 1. Проверка наличия ошибок

Первым шагом необходимо убедиться, что скрипт не выдает никаких ошибок. Для этого вы можете добавить отладочные выводы и гарантировать, что все исключения обрабатываются корректно.

**Обновленный код с дополнительными отладочными сообщениями:**

```python
import requests
import time
import re
from bs4 import BeautifulSoup

API_BASE_URL = "https://api.mail.tm"

def get_domains():
    print("Запрашиваем домены...")
    response = requests.get(f"{API_BASE_URL}/domains")
    try:
        response.raise_for_status()
        data = response.json()
        domains = [domain['domain'] for domain in data['hydra:member']]
        print(f"Доступные домены: {domains}")
        return domains
    except requests.HTTPError as http_err:
        print(f"Ошибка HTTP при получении доменов: {http_err}")
        return []
    except Exception as err:
        print(f"Произошла ошибка при получении доменов: {err}")
        return []

def create_account(address, password):
    print(f"Создаём аккаунт: {address}")
    payload = {
        "address": address,
        "password": password
    }
    response = requests.post(f"{API_BASE_URL}/accounts", json=payload)
    try:
        response.raise_for_status()
        account = response.json()
        print("Аккаунт успешно создан.")
        print(account)
        return account
    except requests.HTTPError as http_err:
        print(f"Ошибка HTTP при создании аккаунта: {http_err}")
        print(f"Ответ сервера: {response.text}")
        return None
    except Exception as err:
        print(f"Произошла ошибка при создании аккаунта: {err}")
        return None

def get_token(address, password):
    print("Получаем токен...")
    payload = {
        "address": address,
        "password": password
    }
    response = requests.post(f"{API_BASE_URL}/token", json=payload)
    try:
        response.raise_for_status()
        token = response.json()['token']
        print("Токен успешно получен.")
        return token
    except requests.HTTPError as http_err:
        print(f"Ошибка HTTP при получении токена: {http_err}")
        print(f"Ответ сервера: {response.text}")
        return None
    except Exception as err:
        print(f"Произошла ошибка при получении токена: {err}")
        return None

def get_messages(token, page=1):
    headers = {
        "Authorization": f"Bearer {token}"
    }
    params = {
        "page": page
    }
    response = requests.get(f"{API_BASE_URL}/messages", headers=headers, params=params)
    try:
        response.raise_for_status()
        return response.json()
    except requests.HTTPError as http_err:
        print(f"Ошибка HTTP при получении сообщений: {http_err}")
        print(f"Ответ сервера: {response.text}")
        return {}
    except Exception as err:
        print(f"Произошла ошибка при получении сообщений: {err}")
        return {}

def get_message_content(token, message_id):
    headers = {
        "Authorization": f"Bearer {token}"
    }
    response = requests.get(f"{API_BASE_URL}/messages/{message_id}", headers=headers)
    try:
        response.raise_for_status()
        return response.json()
    except requests.HTTPError as http_err:
        print(f"Ошибка HTTP при получении содержимого сообщения: {http_err}")
        print(f"Ответ сервера: {response.text}")
        return {}
    except Exception as err:
        print(f"Произошла ошибка при получении содержимого сообщения: {err}")
        return {}

def extract_links(text):
    # Используем BeautifulSoup для извлечения ссылок из HTML
    soup = BeautifulSoup(text, "html.parser")
    links = [a.get('href') for a in soup.find_all('a', href=True)]
    # Также можно извлечь ссылки из простого текста с помощью регулярных выражений
    regex = r'(https?://\S+)'
    links += re.findall(regex, text)
    return links

def main():
    try:
        domains = get_domains()
        if not domains:
            print("Не удалось получить домены. Завершаем работу.")
            return

        # Создаём уникальный адрес (можно улучшить генерацию)
        address = f"user{int(time.time())}@{domains[0]}"
        password = "StrongPassword123!"

        account = create_account(address, password)
        if not account:
            print("Не удалось создать аккаунт. Завершаем работу.")
            return

        token = get_token(address, password)
        if not token:
            print("Не удалось получить токен. Завершаем работу.")
            return

        print(f"Создан временный email: {address}")
        print("Ожидание писем...")

        seen_message_ids = set()

        while True:
            messages_data = get_messages(token)
            messages = messages_data.get('hydra:member', [])

            for message in messages:
                msg_id = message['id']
                if msg_id not in seen_message_ids:
                    seen_message_ids.add(msg_id)
                    content = get_message_content(token, msg_id)
                    if not content:
                        continue
                    subject = content.get('subject', '(Без темы)')
                    from_addr = content.get('from', {}).get('address', '(Без отправителя)')
                    text = content.get('text', '')
                    html = ''.join(content.get('html', []))

                    print(f"\nПолучено новое письмо:")
                    print(f"От: {from_addr}")
                    print(f"Тема: {subject}")
                    print("Содержимое (текст):")
                    print(text)
                    print("Содержимое (HTML):")
                    print(html)

                    combined_content = text + html
                    links = extract_links(combined_content)
                    if links:
                        print("Найденные ссылки:")
                        for link in links:
                            print(link)
                    else:
                        print("Ссылок не найдено.")

            time.sleep(10)  # Ждём 10 секунд перед следующей проверкой

    except Exception as err:
        print(f"Произошла непредвиденная ошибка: {err}")

if __name__ == "__main__":
    main()
```

### 2. Шаги для отладки

1. **Запустите скрипт и внимательно просмотрите вывод в консоли.** Дополнительные сообщения помогут понять, на каком этапе происходит сбой.

2. **Проверьте доступные домены.** Возможно, API не возвращает домены, и скрипт не может создать аккаунт. Убедитесь, что запрос к `/domains` успешен и возвращает список доменов.

3. **Проверьте создание аккаунта.** Убедитесь, что аккаунт успешно создается. Если возникла ошибка при создании, проверьте, нет ли конфликтов, например, адрес уже существует.

4. **Проверьте получение токена.** Если токен не получается, убедитесь, что адрес и пароль указаны правильно.

5. **Проверьте доступ к сообщениям.** Возможно, сообщения просто не приходят. Попробуйте отправить письмо на временный адрес вручную и посмотрите, появляется ли оно в консоли.

### 3. Возможные причины и решения

- **Нет доступных доменов:** Если API не возвращает домены, возможно, сервис временно недоступен или изменил схему. Проверьте актуальность API и обновите `API_BASE_URL` при необходимости.

- **Аккаунт не создается:** Убедитесь, что генерируемый адрес уникален. Если вы запустили скрипт несколько раз за секунду, возможно, адрес не уникален. Можно улучшить генерацию имени пользователя, добавив, например, более случайные числа или символы.

- **Токен не получается:** Убедитесь, что используете правильные адрес и пароль. Также проверьте, нет ли ограничений на количество запросов.

- **Сообщений нет:** Временный email может не получать писем, если никто его не отправляет. Попробуйте отправить тестовое письмо на созданный адрес и дождаться его получения.

### 4. Дополнительные рекомендации

- **Увеличьте интервал ожидания:** Иногда новые письма могут приходить с задержкой. Попробуйте увеличить `time.sleep(10)` до, например, 20 секунд.

- **Логирование:** Для лучшей отладки рекомендуется использовать модуль `logging` вместо `print`, что позволит более гибко управлять выводом сообщений.

- **Обработка ошибок:** Улучшите обработку различных типов ошибок, чтобы скрипт мог корректно реагировать на разные сбои.

### 5. Пример отправки тестового письма

Чтобы убедиться, что ваш временный email работает, вы можете отправить тестовое письмо самостоятельно. Используйте любой другой email-клиент или сервис для отправки письма на ваш временный адрес. После отправки подождите немного и проверьте вывод скрипта.

### 6. Проверка состояния API

Иногда сервисы могут временно быть недоступны или изменять свои API. Рекомендуется проверить [официальную документацию API Mail.tm](https://api.mail.tm) и убедиться, что все эндпоинты и их параметры актуальны.

Если после выполнения всех рекомендаций проблема сохраняется, пожалуйста, предоставьте дополнительную информацию:

- Какие сообщения выводятся в консоли при запуске скрипта.
- Были ли замечены какие-либо ошибки.
- Был ли успешно создан аккаунт (см. вывод `create_account`).
- Получен ли токен (см. вывод `get_token`).

Это поможет более точно определить причину проблемы и предложить соответствующее решение.
User: PS C:\Users\Вадим> & C:/Users/Вадим/AppData/Local/Programs/Python/Python312/python.exe c:/Users/Вадим/Desktop/mine.py
Произошла ошибка: HTTPSConnectionPool(host='api.mail.tm', port=443): Max retries exceeded with url: /domains (Caused by ConnectTimeoutError(<urllib3.connection.HTTPSConnection object at 0x00000235BEEDA9F0>, 'Connection to api.mail.tm timed out. (connect timeout=None)'))
PS C:\Users\Вадим>
Assistant: Извините за возникшие сложности. Ошибка, которую вы видите, указывает на то, что ваше приложение не может установить соединение с сервером `api.mail.tm`. Давайте разберёмся, как можно устранить эту проблему.

### Возможные причины ошибки:
1. **Проблемы с сетью:**
   - Убедитесь, что у вас есть стабильное интернет-соединение.
   - Попробуйте открыть `https://api.mail.tm/domains` в вашем браузере. Если сайт не открывается, возможно, сервер недоступен или у вас есть проблемы с доступом к нему.

2. **Блокировка фаерволом или антивирусом:**
   - Проверьте настройки вашего фаервола или антивируса. Возможно, они блокируют исходящие соединения к `api.mail.tm`.
   - Временно отключите фаервол или антивирус и попробуйте снова запустить скрипт.

3. **Прокси-сервер:**
   - Если вы используете прокси-сервер, убедитесь, что настроили его правильно в вашем окружении или в самом скрипте.

4. **Проблемы с самим API:**
   - Возможно, сервис Mail.tm временно недоступен. Проверьте статус сервиса или попробуйте позже.

### Шаги для отладки и решения проблемы:

#### 1. Проверка доступности API через браузер или `curl`
Попробуйте открыть `https://api.mail.tm/domains` в вашем браузере. Если страница не загружается, попробуйте использовать `curl` для проверки доступности:

```bash
curl -I https://api.mail.tm/domains
```

Если вы получите ответ с кодом состояния (например, `200 OK`), значит API доступен. Если нет, проблема может быть на стороне сервера или в вашем интернете.

#### 2. Проверка DNS и ping
Попробуйте проверить, резолвится ли домен и доступен ли он:

```bash
ping api.mail.tm
```

Если вы не получаете ответа, возможно, DNS не может разрешить этот домен. Попробуйте сменить DNS-серверы на публичные, например, Google DNS (8.8.8.8 и 8.8.4.4).

#### 3. Добавление таймаута и повторных попыток в код
Иногда временные сетевые проблемы могут вызвать такие ошибки. Можно добавить таймаут и повторные попытки для повышения устойчивости скрипта.

**Обновлённый код с таймаутом и повторными попытками:**

```python
import requests
import time
import re
from bs4 import BeautifulSoup
from requests.adapters import HTTPAdapter
from urllib3.util.retry import Retry

API_BASE_URL = "https://api.mail.tm"

# Настройка сессии с повторными попытками
session = requests.Session()
retry = Retry(
    total=5,  # общее количество попыток
    backoff_factor=1,  # фактор увеличения времени между попытками
    status_forcelist=[429, 500, 502, 503, 504],
    method_whitelist=["GET", "POST", "DELETE"]
)
adapter = HTTPAdapter(max_retries=retry)
session.mount("https://", adapter)
session.mount("http://", adapter)

def get_domains():
    print("Запрашиваем домены...")
    try:
        response = session.get(f"{API_BASE_URL}/domains", timeout=10)
        response.raise_for_status()
        data = response.json()
        domains = [domain['domain'] for domain in data.get('hydra:member', [])]
        print(f"Доступные домены: {domains}")
        return domains
    except requests.exceptions.Timeout:
        print("Превышено время ожидания при подключении к API /domains.")
    except requests.HTTPError as http_err:
        print(f"HTTP ошибка при получении доменов: {http_err}")
        print(f"Ответ сервера: {response.text}")
    except Exception as err:
        print(f"Произошла ошибка при получении доменов: {err}")
    return []

def create_account(address, password):
    print(f"Создаём аккаунт: {address}")
    payload = {
        "address": address,
        "password": password
    }
    try:
        response = session.post(f"{API_BASE_URL}/accounts", json=payload, timeout=10)
        response.raise_for_status()
        account = response.json()
        print("Аккаунт успешно создан.")
        print(account)
        return account
    except requests.exceptions.Timeout:
        print("Превышено время ожидания при подключении к API /accounts.")
    except requests.HTTPError as http_err:
        print(f"HTTP ошибка при создании аккаунта: {http_err}")
        print(f"Ответ сервера: {response.text}")
    except Exception as err:
        print(f"Произошла ошибка при создании аккаунта: {err}")
    return None

def get_token(address, password):
    print("Получаем токен...")
    payload = {
        "address": address,
        "password": password
    }
    try:
        response = session.post(f"{API_BASE_URL}/token", json=payload, timeout=10)
        response.raise_for_status()
        token = response.json().get('token')
        if token:
            print("Токен успешно получен.")
            return token
        else:
            print("Токен не найден в ответе.")
    except requests.exceptions.Timeout:
        print("Превышено время ожидания при подключении к API /token.")
    except requests.HTTPError as http_err:
        print(f"HTTP ошибка при получении токена: {http_err}")
        print(f"Ответ сервера: {response.text}")
    except Exception as err:
        print(f"Произошла ошибка при получении токена: {err}")
    return None

def get_messages(token, page=1):
    headers = {
        "Authorization": f"Bearer {token}"
    }
    params = {
        "page": page
    }
    try:
        response = session.get(f"{API_BASE_URL}/messages", headers=headers, params=params, timeout=10)
        response.raise_for_status()
        return response.json()
    except requests.exceptions.Timeout:
        print("Превышено время ожидания при подключении к API /messages.")
    except requests.HTTPError as http_err:
        print(f"HTTP ошибка при получении сообщений: {http_err}")
        print(f"Ответ сервера: {response.text}")
    except Exception as err:
        print(f"Произошла ошибка при получении сообщений: {err}")
    return {}

def get_message_content(token, message_id):
    headers = {
        "Authorization": f"Bearer {token}"
    }
    try:
        response = session.get(f"{API_BASE_URL}/messages/{message_id}", headers=headers, timeout=10)
        response.raise_for_status()
        return response.json()
    except requests.exceptions.Timeout:
        print(f"Превышено время ожидания при подключении к API /messages/{message_id}.")
    except requests.HTTPError as http_err:
        print(f"HTTP ошибка при получении содержимого сообщения: {http_err}")
        print(f"Ответ сервера: {response.text}")
    except Exception as err:
        print(f"Произошла ошибка при получении содержимого сообщения: {err}")
    return {}

def extract_links(text):
    # Используем BeautifulSoup для извлечения ссылок из HTML
    soup = BeautifulSoup(text, "html.parser")
    links = [a.get('href') for a in soup.find_all('a', href=True)]
    # Также можно извлечь ссылки из простого текста с помощью регулярных выражений
    regex = r'(https?://\S+)'
    links += re.findall(regex, text)
    return links

def main():
    try:
        domains = get_domains()
        if not domains:
            print("Не удалось получить домены. Завершаем работу.")
            return

        # Создаём уникальный адрес (можно улучшить генерацию)
        address = f"user{int(time.time())}@{domains[0]}"
        password = "StrongPassword123!"

        account = create_account(address, password)
        if not account:
            print("Не удалось создать аккаунт. Завершаем работу.")
            return

        token = get_token(address, password)
        if not token:
            print("Не удалось получить токен. Завершаем работу.")
            return

        print(f"Создан временный email: {address}")
        print("Ожидание писем...")

        seen_message_ids = set()

        while True:
            messages_data = get_messages(token)
            messages = messages_data.get('hydra:member', [])

            for message in messages:
                msg_id = message['id']
                if msg_id not in seen_message_ids:
                    seen_message_ids.add(msg_id)
                    content = get_message_content(token, msg_id)
                    if not content:
                        continue
                    subject = content.get('subject', '(Без темы)')
                    from_addr = content.get('from', {}).get('address', '(Без отправителя)')
                    text = content.get('text', '')
                    html = ''.join(content.get('html', []))

                    print(f"\nПолучено новое письмо:")
                    print(f"От: {from_addr}")
                    print(f"Тема: {subject}")
                    print("Содержимое (текст):")
                    print(text)
                    print("Содержимое (HTML):")
                    print(html)

                    combined_content = text + html
                    links = extract_links(combined_content)
                    if links:
                        print("Найденные ссылки:")
                        for link in links:
                            print(link)
                    else:
                        print("Ссылок не найдено.")

            time.sleep(10)  # Ждём 10 секунд перед следующей проверкой

    except Exception as err:
        print(f"Произошла непредвиденная ошибка: {err}")

if __name__ == "__main__":
    main()
```

#### 4. Проверка доступности API из кода

Добавьте следующий небольшой код, чтобы проверить, доступен ли API из Python:

```python
import requests

try:
    response = requests.get("https://api.mail.tm/domains", timeout=10)
    if response.status_code == 200:
        print("API доступен.")
    else:
        print(f"API вернул статус: {response.status_code}")
except Exception as e:
    print(f"Не удалось подключиться к API: {e}")
```

Сохраните этот код в отдельный файл, например, `test_api.py`, и выполните его:

```bash
python test_api.py
```

Это поможет определить, доступен ли API вообще.

#### 5. Альтернативный способ создания аккаунта (обход DNS)

Если проблема связана с разрешением DNS, попробуйте использовать IP-адрес `api.mail.tm`, но сначала узнайте его с помощью DNS-lookup:

```bash
nslookup api.mail.tm
```

Получив IP-адрес, замените `API_BASE_URL` на `https://<IP-адрес>`. Однако это временное решение, так как IP-адреса могут изменяться.

#### 6. Использование прокси (если применимо)

Если вы находитесь за прокси-сервером, настройте его в вашем скрипте:

```python
proxies = {
    "http": "http://user:password@proxyserver:port",
    "https": "http://user:password@proxyserver:port",
}

response = session.get(f"{API_BASE_URL}/domains", proxies=proxies, timeout=10)
```

#### 7. Проверка SSL-сертификатов

Если есть проблемы с SSL, временно отключите проверку сертификатов (не рекомендуется для продакшн окружения):

```python
response = session.get(f"{API_BASE_URL}/domains", timeout=10, verify=False)
```

Однако, это может быть небезопасно и не рекомендуется, если вы не уверены в безопасности источника.

#### 8. Обратитесь к поддержке Mail.tm

Если после всех попыток проблема сохраняется, возможно, стоит обратиться в поддержку Mail.tm, чтобы уточнить статус API.

### Резюме

1. **Проверьте доступность API через браузер и `curl`.**
2. **Добавьте таймаут и повторные попытки в ваш скрипт.**
3. **Убедитесь, что фаервол или антивирус не блокируют соединение.**
4. **Проверьте настройки прокси-сервера, если используете его.**
5. **Попробуйте выполнить простой тестовый запрос к API через отдельный скрипт.**
6. **Обратитесь в поддержку Mail.tm, если проблема не устранена.**

Если после всех шагов проблема осталась, пожалуйста, предоставьте дополнительную информацию о ваших действиях и результатах, чтобы мы могли помочь более детально.
User: тогда чсдклеай 
RapidAPI Hub: публичная торговая площадка API
API поиска

Добавьте свой API

Войти

Зарегистрироваться
Открытие
Рабочее пространство

Зарегистрироваться
Бесплатный значок TempMail API
Обзор API
Версия
Открытая игровая площадка
v1 (текущая)
Конечные точки
Поиск конечных точек
ПОЛУЧАТЬ

📩 Получить всю почту

ПОЛУЧАТЬ

📖 Чтение почты по идентификатору

ПОЛУЧАТЬ

📨 Получить новый почтовый аккаунт

категории
Электронная почта
икона
Бесплатный API TempMail


Тестовая конечная точка

Обзор

Обсуждения
Бесплатный API TempMail Api миниатюра
Бесплатный API TempMail
Бесплатно

( 5 )
0.3 Популярность
4 % Уровень обслуживания
Задержка 1782 мс
3 % Тест
Посмотрите, какие планы подписки предоставляет этот API.
Обзор API
📑 Документация по API временной почты Легко управляйте временными учетными записями электронной почты и сообщениями с помощью API временной почты. Это удобное и эффективное решение идеально подходит для приложений, веб-сайтов или новых проектов с временными службами электронной почты. 📧✨

Интеграция API временной почты в ваши проекты позволяет автоматизировать процесс генерации временных адресов электронной почты и беспрепятственно получать доступ к полученным письмам.


Легко управляйте временными учетными записями электронной почты и сообщениями с помощью API временной почты. Это удобное и эффективное решение идеально подходит для приложений, веб-сайтов или новых проектов с временными службами электронной почты. 📧✨

📑 Документация API временной почты
Легко управляйте временными учетными записями электронной почты и сообщениями с помощью API временной почты. Это удобное и эффективное решение идеально подходит для приложений, веб-сайтов или новых проектов с временными службами электронной почты. 📧✨

📝 С чего начать?
Начать работу с API временной почты просто:

😎 Базовый URL API: https://free-tempmail-api.p.rapidapi.com/

1. 📨 Получите новый почтовый аккаунт
Конечная точка: /newmail
Метод: ПОЛУЧИТЬ
Описание: Создайте новую временную учетную запись электронной почты.
Параметры запроса: нет
Пример запроса:
GET /newmail
Пример ответа:
{
  "success": true,
  "newmail": {
    "email": "susan119776@hldrive.com",
    "token": " your token hare "
  }
}
2. 📩 Получить всю почту
Конечная точка: /mails
Метод: ПОЛУЧИТЬ
Описание: Извлечь все письма из временного почтового ящика.
Параметры запроса: нет
Заголовки:
mailtoken(строка, обязательно): токен аутентификации для доступа к почтовому ящику.
Пример запроса:
GET /mails
Headers:
  mailtoken: your_token_here
Пример ответа:
{
  "success": true,
  "mails": [{ get all mails here }]
}
3. 📖 Чтение почты по идентификатору
Конечная точка: /read/{mail_id}
Метод: ПОЛУЧИТЬ
Описание: Прочитать определенное письмо во временном почтовом ящике по его идентификатору.
Параметры пути:
mail_id(строка, обязательно): Уникальный идентификатор электронной почты.
Пример запроса:
GET /read/658839bc9995d8263956db24
Пример ответа:
{
  "success": true,
  "mail": {
    "id": "658839bc9995d8263956db24",
    "seen": true,
    "from": {
      "address": "devgdjatt@onmail.com",
      "name": "Nina Mejia"
    },
    "to": [
      {
        "address": "longdyane@desertsundesigns.com",
        "name": ""
      }
    ],
    "cc": [],
    "bcc": [],
    "subject": "",
    "text": "your mail text here",
    "html": [
      "<div>your mail text here</div>"
    ],
    "date": "2023-12-24T14:01:24+00:00"
  }
}
Начните свое путешествие с API временной почты сегодня и оцените удобство управления временными учетными записями электронной почты без особых усилий! 📧✨

🎉 Кредиты
Мы хотим признать и оценить тяжелую работу и креативность нашей команды разработчиков. Они сделали этот API реальностью. 🙌

Ведущий разработчик: Разработчик Гаурав Джатт 👨‍💻
Бэкэнд-разработчик: Dev. Гаурав Джатт 👨‍💻
Информация о поставщике
создатель API

Profile image
к
девгауравьятт
подписчики

833

подводные лодки

категория

Электронная почта
ресурсы

Сайт продукта

Зарегистрируйтесь, чтобы связаться с поставщиком


получать уведомления


Написать
Cоставить
Ответить
Войти
Регистрация
Музыка
Видео
Сообщества
Мини-приложения
Игры
Приложение на телефон
Применяются рекомендательные технологии

Купи дешево. Компьютерные и прочие железки
вернуться к странице
Записи сообщества
Все записи
Поиск записей
Запись на стене

Максим Татарский
19 мар 2023
·
в Купи дешево. Компьютерные и прочие железки
Стал счастливым обладателем rx 6650 xt msi gaming x. Карта покупалась новой. При использовании столкнулся с тем что карта греется до 71° и вертушки работают на 50% (около 2000 об/мин.), Что несколько отличается от тестов на Ютубе. Корпус у меня закрытый versa h17, но все равно температуры несколько огорчают, хотелось видеть в районе 65 при оборотах до 1500. Решил сделать андервольт, и столкнулся с проблемой, что при стоковых частотах напряжение можно понизить только до 1150 мV, если ниже начинаются краши. При этом частота в стоке 2765. Вопрос: насколько можно понизить частоту, чтоб несильно потерять в производительности? Опасно ли для видеокарты понижение напряжения и частоты?

6
Нравится

Показать список поделившихся

Игорь Никулин
Амд изменила способ изменения температуры, по сравнению с картами на поколение ниже прибавляй 10 градусов
Показать список оценивших
19 мар 2023Поделиться

Максим Татарский·Автор
Игорь, пруфы есть? Как можно изменить способ измерения температуры?
1
Показать список оценивших
19 мар 2023Поделиться

Игорь Никулин ответил Максиму
Максим, раньше считала по датчику в хотпоинте, сейчас датчики в нескольких разных местах которые в основном греются и выводится максимум из этого
Показать список оценивших
19 мар 2023Поделиться

Данила Андреевич  ответил Игорю
Игорь, хотпоинт Аристон? Казалось бы, причем тут стиральная машина
1
Показать список оценивших
19 мар 2023Поделиться

Семён Якимов  ответил Даниле
Данила, хот-спот
1
Показать список оценивших
19 мар 2023Поделиться

Данила Андреевич  ответил Семёну
Семён, ну это я понял, а ты сарказма не понял
Показать список оценивших
19 мар 2023Поделиться

Семён Якимов  ответил Даниле
Данила, мне не за 30+ чтоб так шутить или выкупать такие шутки
Показать список оценивших
19 мар 2023Поделиться

Алексей Галямин
Лучше отнеси в ДНС и купи сапфир на 8 гигов мсай по охладу не очень.......и сапфир на 8 единственная на 8 6500 которая не упрется в память при случае чего а это значит что будет меньше обмен по шине и больше фпс в играх........8 гиговка по уровню производительности дотягивает до 1660 в играх......карту незаслуженно захейтили в инете но она раскрывается только на 8 гигах...разница в фпс там просто гиганская у 4 и 8 гиговой версии даже на PCI 3.0 тогда как 3 и 4 версии не особо влияют
Формат:
Эссе
Абзац
Электронная почта
Идея
Запись в блоге
Контур
Маркетинговая реклама
Комментарий
Сообщение
Твиттер
Тон:
🙂 Официально
😉 Повседневный
🧐 Профессиональный
🤩 Энтузиаст
🤓 Информационный
😄 Смешно
Длина:
Короткий
Середина
Long
Язык:

Русский
Отправить (ввести)
Оставьте отзыв и получите кредит ❤
Чат
Спросить
Поиск
Написать
Изображение
ЧатPDF
Видение
Полная страница
Приглашай и Зарабаты