Альтермин и подпись пользователя с постфиксом

Вопрос или проблема

Я сталкиваюсь с проблемой при добавлении подписей к электронным письмам с помощью скрипта. Подписи корректно вставляются в новые сообщения, но возникает проблема при работе с письмами “Ответ”, которые содержат историю сообщений.

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

Существует ли рекомендуемый способ, чтобы убедиться, что подпись расположена правильно, прямо под текстом ответа?

Я пробовал некоторые исправления, но они часто приводят к проблемам с форматированием, например, подпись корректно отображается в обычном тексте, но нарушается в HTML, или наоборот.

Любой совет или идеи будут очень полезны. Спасибо!

Скрипт:

#!/bin/sh

# DB etc
INSPECT_DIR="/var/spool/filter"
SENDMAIL="/usr/sbin/sendmail"
DB_USER="XXXXXX"
DB_PASS="XXXXXX"
DB_NAME="admin"

# Exits
EX_TEMPFAIL=75
EX_UNAVAILABLE=69

#del temps
trap "rm -f $INSPECT_DIR/in.$$ $INSPECT_DIR/signature.$$" 0 1 2 3 15

cd $INSPECT_DIR || { 
    echo "$INSPECT_DIR не существует"
    exit $EX_TEMPFAIL
}

cat > "$INSPECT_DIR/in.$$" || {
    echo "Письмо не может быть сохранено."
    exit $EX_TEMPFAIL
}

FROM_EMAIL=$(grep -i "^From:" "$INSPECT_DIR/in.$$" | awk '{print $2}')

SIGNATURE=$(mysql --default-character-set=utf8mb4 -u $DB_USER -p$DB_PASS -D $DB_NAME -se "SELECT signature FROM signature_mail WHERE mail="$FROM_EMAIL" AND enable=1 LIMIT 1;")

if [ -z "$SIGNATURE" ]; then
    echo "Подпись не найдена или отключена, пропуск добавления подписи."
else
    echo "$SIGNATURE" > "$INSPECT_DIR/signature.$$"

    /usr/bin/altermime --input="$INSPECT_DIR/in.$$" \
        --disclaimer="$INSPECT_DIR/signature.$$" \
        --disclaimer-html="$INSPECT_DIR/signature.$$" \
        --force-for-bad-html
fi

$SENDMAIL -oi "$@" < "$INSPECT_DIR/in.$$"

exit $?

Ответ на сообщение:

Return-Path: <[email protected]>
X-Original-To: [email protected]
Delivered-To: [email protected]
Received: by secret.server.com (Postfix, from userid 994)
    id 145C3126147; Thu,  2 Jan 2025 09:53:23 +0100 (CET)
Received: from secret.server.com (localhost.localdomain [127.0.0.1])
    (Authenticated sender: [email protected])
    by secret.server.com (Postfix) with ESMTPSA id E2FD2122704
    for <[email protected]>; Thu,  2 Jan 2025 09:53:22 +0100 (CET)
MIME-Version: 1.0
Date: Thu, 02 Jan 2025 09:53:22 +0100
From: [email protected]
To: [email protected]
Subject: Re: XX
In-Reply-To: <[email protected]>
References: <[email protected]>
 <[email protected]>
Message-ID: <[email protected]>
X-Sender: [email protected]
Content-Type: multipart/alternative;
 boundary="=_655151f4ae60099bae8c7da9532d2d24"
X-Spam-Score: -2.43

--=_655151f4ae60099bae8c7da9532d2d24
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; charset=UTF-8;
 format=flowed

XX3 - с подписью (но плохо)

Dne 2025-01-02 09:53, [email protected] написал:

> XX2 - без подписи (это правильно)
> 
> Dne 2025-01-02 09:52, [email protected] написал:
> 
>> XX1
>> С уважением,
>> 
>> Рыбичка +ěščřžý(
<p>С уважением,</p>
<p>Рыбичка +ěščřžý(</p>

--=_655151f4ae60099bae8c7da9532d2d24
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset=UTF-8

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; charset=
=3DUTF-8" /></head><body style=3D'font-size: 10pt; font-family: Verdana,Gen=
eva,sans-serif'>
<p>XX3 - с подписью (но плохо)</p>
<div id=3D"signature"></div>
<p><br /></p>
<p id=3D"reply-intro">Dne 2025-01-02 09:53, [email protected] написал:</p>
<blockquote type=3D"cite" style=3D"padding: 0 0.4em; border-left: #1010ff 2=
px solid; margin: 0">
<div id=3D"replybody1" style=3D"font-size: 10pt; font-family: Verdana,Genev=
a,sans-serif;">
<p>XX2 - без подписи (это правильно)</p>
<div id=3D"v1signature"></div>
<p><br /></p>
<p id=3D"v1reply-intro">Dne 2025-01-02 09:52, [email protected] написал:</p>
<blockquote style=3D"padding: 0 0.4em; border-left: #1010ff 2px solid; marg=
in: 0;">
<div id=3D"v1replybody1" style=3D"font-size: 10pt; font-family: Verdana,Gen=
eva,sans-serif;">
<p>XX1</p>
<br />
<p>С уважением,</p>
<p>Рыби=C4=8Dка +=C4=9B&scaron;=C4=8D=C5=99=C5=BE&yacute;(</p>
</div>
</blockquote>
</div>
</blockquote>

<br>=
<p>С уважением,</p>=0D=0A
<p>Рыби=C4=8Dка +=C4=9B=C5=A1=C4=8D=C5=99=C5=BE=C3=BD(</p>=0D=0A
=0A
<br>=
</body></html>

--=_655151f4ae60099bae8c7da9532d2d24--

Ответ или решение

Ваша задача — внести корректировки в сценарий, который должен добавлять подписи к письмам, таким образом, чтобы они появлялись непосредственно под текстом ответа, а не в конце переписки.

На данный момент проблема заключается в том, что подпись, вместо того чтобы быть интегрированной под последним ответом, размещается в конце всего письма, особенно при работе с HTML-форматированием. Рассмотрим, как можно разрешить эту ситуацию, учитывая указанный сценарий на Shell script и подставляя подписи через altermime.

Основные причины проблемы

  1. Неправильное определение границ текста для вставки: Наиболее вероятная причина заключается в том, что используется стандартная вставка, которая не учитывает структуру электронной почты и игнорирует разделение на секции ответа и историю переписки.

  2. Форматирование HTML: Различия в обработке текста между простым текстом и HTML могут приводить к различиям в отображении.

  3. Статический подход скрипта: Скрипт altermime, вероятно, используется без учета необходимости отдельной обработки для письма с ответами.

Рекомендации по исправлению

Чтобы добиться желаемого поведения, следует выполнить несколько шагов:

  1. Идентификация текста для вставки подписи: Применить регулярные выражения или другие методы для четкой идентификации конца основного текста в ответе.

  2. Интеграция с altermime: Использовать функцию insert для выбора правильной позиции в HTML и текстовом формате. Возможно, это потребует написания собственного патча или подключения другого инструмента.

  3. Создание более сложного логического сценария: Вместо статичного добавления подписи, разрабатывать сценарии, которые динамически определяют формат и содержание сообщения.

Вот пример того, как можно улучшить скрипт:

#!/bin/sh

# Настройка переменных и окружения
INSPECT_DIR="/var/spool/filter"
SENDMAIL="/usr/sbin/sendmail"
DB_USER="XXXXXX"
DB_PASS="XXXXXX"
DB_NAME="admin"

# Обработка сигнатур и выходов
trap "rm -f $INSPECT_DIR/in.$$ $INSPECT_DIR/signature.$$" 0 1 2 3 15

cd $INSPECT_DIR || { 
    echo "$INSPECT_DIR не существует"
    exit $EX_TEMPFAIL
}

cat > "$INSPECT_DIR/in.$$" || {
    echo "Не удается сохранить email."
    exit $EX_TEMPFAIL
}

FROM_EMAIL=$(grep -i "^From:" "$INSPECT_DIR/in.$$" | awk '{print $2}')

SIGNATURE=$(mysql --default-character-set=utf8mb4 -u $DB_USER -p$DB_PASS -D $DB_NAME -se "SELECT signature FROM signature_mail WHERE mail='$FROM_EMAIL' AND enable=1 LIMIT 1;")

if [ -z "$SIGNATURE" ]; then
    echo "Подпись не найдена или отключена, пропуск добавления подписи."
else
    echo "$SIGNATURE" > "$INSPECT_DIR/signature.$$"

    # Переменная для идентификации конца ответа
    PATTERN_END_REPLY="\n--\n"

    # Динамическое определение места для вставки подписи
    gawk -v signature="$SIGNATURE" -v end_reply="$PATTERN_END_REPLY" '
    BEGIN { RS=end_reply }
    NR==1 { print $0; print signature }
    NR >1 { print end_reply $0 }
    ' "$INSPECT_DIR/in.$$" > "$INSPECT_DIR/processed.$$"

    mv "$INSPECT_DIR/processed.$$" "$INSPECT_DIR/in.$$"
fi

$SENDMAIL -oi "$@" < "$INSPECT_DIR/in.$$"

exit $?

SEO и профессиональное написание

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

Таким образом, корректировки вашего скрипта должны улучшить интеграцию подписи в текста ответа на электронные письма, сохраняя форматирование и корректно обрабатывая HTML и текстовый формат. Учитывайте требования к SEO и избегайте стандартных формулировок, чтобы ваш материал оставался актуальным и полезным.

Оцените материал
Добавить комментарий

Капча загружается...