Обычно проблема в несоответствии письма стандарту SMTP. Нужно сгенерировать multipart-письмо, где одной из частей и будет вложенный файл. В минимальном варианте исходник письма должен выглядеть так:
Основные заголовки письма\r\n
Content-Type: multipart/mixed; boundary="разграничитель"\r\n
\r\n
--разграничитель\r\n
Content-Type: text/plain; charset="UTF-8";\r\n
\r\n
Основной текст письма\r\n
--разграничитель\r\n
Content-Type: правильный mime-тип, например application/octet-stream; name="имя файла"\r\n
Content-Transfer-Encoding: base64\r\n
Content-Disposition: attachment; filename="имя файла"\r\n
\r\n
Файл, закодированный в base-64\r\n
--разграничитель--\r\n
Пустые строки после заголовка и подзаголовков обязательны.