Моей компании создали веб-сайт с PHP. Мы используем встроенную почтовую функциональность PHP для отправки тысяч электронных писем подписчикам ежедневно.
Это - ужасная идея. Это дросселирует наш сервер и занимает часы для завершения целого пакета.
Теперь я посмотрел на услуги по массовой рассылке как MailChimp (который заменил бы нашу существующую систему отправки того же электронного письма многим людям), но что я думаю, что действительно хотел бы сделать, должен настроить несколько сложную систему уведомления.
Вместо того, чтобы посылать массовое электронное письмо каждому человеку каждый раз, когда что-то важное происходит, я хотел бы, чтобы клиенты смогли настроить уровень и содержание электронных писем, которые они получают.
Даже с помощью этой новой идеи, мы говорим о БОЛЬШОМ КОЛИЧЕСТВЕ посланных электронных писем.
Таким образом, мой вопрос очень конкретен: у Меня есть общее представление о том, как создать систему внутренне, но что лучший способ состоит в том, чтобы отослать все эти электронные письма?
Пункты маркированного списка для рассмотрения:
Мысли?Совет? Укажите на меня в правильном направлении?
Править
Разъясниться:
Я могу сделать их самостоятельно:
И нужно что-то еще (приложение, сторонний сервис, w/e) к:
Я склоняюсь к стороннему сервису, так как я не уверен, что любое приложение может постараться не дросселировать сервер при посылании тысяч электронных писем (хотя я не считал бы меня почтовым экспертом, таким образом, я мог быть неправым).
Я бы порекомендовал использовать третьстороннюю почтовую службу SilverPop или что-то вроде. Мы использовали их несколько лет и были довольно довольны. У них уже есть отношения с основными почтовыми клиентами (AOL, Yahoo!, Gmail и т. Д.), И они делают хорошую работу, чтобы рассказать вам, если вы отправляете вещи, скорее всего, будут классифицированы как спам.
У них довольно обширная API, использующая запросы XML HTTP / HTTPS, которые могут привязать к существующим системам. Вы можете использовать его для удаленного триггера электронной почты, расписания рассылки, настроить содержимое электронной почты, настроить, управлять и запросить огромные списки получателей, запускают пакетные процессы и т. Д.
Это не идеальный сервис, но по сравнению с большим количеством другие там, они хорошо хорошо. У меня было очень мало жалоб на них на данный момент.
Мы используем встроенную функциональность PHP электронной почты для отправки тысяч электронных писем для подписчиков ежедневно.
Это ужасная идея. Это задыхается наш сервер и занимает несколько часов, чтобы завершить всю партию.
Как вы думаете, почему ваши проблемы являются чем-то, что связано со встроенной функцией электронной почты PHP? Это очень тонкое обертку вокруг «почты» или простой SMTP-клиент в зависимости от какой платформы, на которой вы работаете.
Когда вы говорите, что он задыхает ваш сервер - вы имеете в виду ваш почтовый сервер? Ваш веб-сервер? Что-то еще?
Здесь нигде нет достаточно информации, чтобы сделать правильный диагноз, но похоже, что проблемы состоят из ваших собственных, наверняка, есть много людей, которые обещают сортировать все свои проблемы для вас, если только вас Купить свой последний продукт / услугу. Но есть очень хороший шанс, что это не решит ваши текущие проблемы.
Можете ли вы сказать нам:
Какая ОС работает на PHP на
Как вы вызываете код для создания электронных писем
, какая настройка почты в файле php.ini
, какой тип MTA вы используете? На какой ОС?
Как ye mta copnfigured - это доставлено напрямую или через смарт-реле?
Какой сервер получает «задохнул»?
Какие меры против спама у вас на месте для исходящей почты ?
Затем сообщите нам, что вы сделали, чтобы диагностировать ошибку, и почему вы считаете его конкретно на отправке почты.
c.
Возможно, не идеально, но если вы смотрите на крупномасштабную трансмиссию, есть коммерческие решения, такие как POWERMTA 25's Powermta , которые могут быть установлены для эффективного передачи содержимого данной папки.
Как таковой, вы просто используете PHP для создания персональных данных FOMIMATATED CAR для каждого исходящего электронного письма и поместите их во временный каталог до передачи. (Я написал такую систему в прошлом, и вы будете удивлены способностью PHP размахивать электронные письма, даже с довольно сложными текстовыми электронными письмами и HTML с изображениями в виде встроенных вложений и т. Д.) Как только вы были готовы к Передача, вы бы затем переместите файлы un-massse в папку Moserged Powermta, и она позаботится о передаче.
В зависимости от того, как вы посмотрите на него преимущество / проблему с таким решением, заключается в том, что вам нужно будет создавать доверительные отношения с людьми, такими как AOL, MSN / Hotmail и т. Д. Для того, чтобы ваш почтовый сервер не заблокировал в черный список Из-за отчетности пользователя в качестве спама. (Это сказано, что это, вероятно, будет фактором с любым решением DIY.)
После просмотра кода взаимодействия Windows Shell я обнаружил, что для интерфейсов следовало использовать [ComImport] и NOT [ComVisible]. Чтобы сделать подписи равными уже зарегистрированным, я использовал [PreserureSig]. Наследование интерфейса также нуждалось в некоторой помощи путем повторного объявления базового интерфейса в родительском интерфейсе.
Надеюсь, это кому-то поможет.
Вот рабочий класс
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace WmpTestPlugin
{
[ComImport]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("695386EC-AA3C-4618-A5E1-DD9A8B987632")]
public interface IWmpEffects2 : IWmpEffects
{
[PreserveSig]
new int Render(ref TimedLevel pLevels, IntPtr Hdc, ref RECT pRC);
[PreserveSig]
new int MediaInfo(int lChannelCount, int lSampleRate, string bstrTitle);
[PreserveSig]
new int GetCapabilities(ref int pdwCapabilities);
[PreserveSig]
new int GetTitle(ref string bstrTitle);
[PreserveSig]
new int GetPresetTitle(int nPreset, ref string bstrPresetTitle);
[PreserveSig]
new int GetPresetCount(ref int count);
[PreserveSig]
new int SetCurrentPreset(int currentpreset);
[PreserveSig]
new int GetCurrentPreset(ref int currentpreset);
[PreserveSig]
new int DisplayPropertyPage(IntPtr hwndOwner);
[PreserveSig]
new int GoFullScreen(bool fFullscreen);
[PreserveSig]
new int RenderFullScreen(ref TimedLevel pLevels);
[PreserveSig]
int SetCore(IntPtr pPlayer);
[PreserveSig]
int Create(IntPtr hwndParent);
[PreserveSig]
int Destroy();
[PreserveSig]
int NotifyNewMedia(IntPtr pMedia);
[PreserveSig]
int OnWindowMessage(int Msg, int WParam, int LParam, ref int plResultParam);
[PreserveSig]
int RenderWindowed(ref TimedLevel pData, bool fRequiredRender);
}
[ComImport]
[InterfaceType(ComInterfaceType.InterfaceIsIUnknown)]
[Guid("D3984C13-C3CB-48e2-8BE5-5168340B4F35")]
public interface IWmpEffects
{
[PreserveSig]
int Render(ref TimedLevel pLevels, IntPtr Hdc, ref RECT pRC);
[PreserveSig]
int MediaInfo(int lChannelCount, int lSampleRate, string bstrTitle);
[PreserveSig]
int GetCapabilities(ref int pdwCapabilities);
[PreserveSig]
int GetTitle(ref string bstrTitle);
[PreserveSig]
int GetPresetTitle(int nPreset, ref string bstrPresetTitle);
[PreserveSig]
int GetPresetCount(ref int count);
[PreserveSig]
int SetCurrentPreset(int currentpreset);
[PreserveSig]
int GetCurrentPreset(ref int currentpreset);
[PreserveSig]
int DisplayPropertyPage(IntPtr hwndOwner);
[PreserveSig]
int GoFullScreen(bool fFullscreen);
[PreserveSig]
int RenderFullScreen(ref TimedLevel pLevels);
}
//[ComVisible(true)]
[StructLayout(LayoutKind.Sequential)]
public struct Data
{
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x400)]
public byte[] Data0;
[MarshalAs(UnmanagedType.ByValArray, SizeConst = 0x400)]
public byte[] Data1;
}
//[ComVisible(true)]
public enum PlayerState
{
Stop_State,
Pause_State,
Play_State
}
//[ComVisible(true)]
[StructLayout(LayoutKind.Sequential)]
public struct TimedLevel
{
public Data Frequency;
public Data Waveform;
public PlayerState State;
public long TimeStamp;
}
//[ComVisible(true)]
[StructLayout(LayoutKind.Sequential)]
public struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
public int Width { get { return this.Right - this.Left; } }
public int Height { get { return this.Bottom - this.Top; } }
}
}
-121--4950868- -121--4013165-
Установки - > Java - > Стиль кода - > Форматер
.
Нажмите кнопку «Изменить» в профиле (возможно, потребуется создать новый профиль, так как изменить значение по умолчанию невозможно).В разделе отступов выберите «
Выровнять поля по столбцам
».Затем в коде Ctrl + Shift + F запустит этот форматтер.
Используйте Google AppEngine, если вас беспокоит масштабируемость и настройка: он предоставляет API электронной почты и вы можете взаимодействовать с ним все, что угодно, при условии, что это через HTTP интерфейс.
Конечно, это просто предложение - игнорировать, если это не подходит.
Я обычно передвигаюсь этим, имея почту «Отправка» функции, которая бросила электронные письма в очередь (таблицу базы данных) с работой, которая управляла каждые пару минут, схватила следующие ссылки на электронные письма в Очередь, послал их и пометил их как преуспеть. Это простые кости этого. Затем вы можете добавить в обработку для сбоев электронной почты, возвращенную почту и т. Д. В версии 2.
Почему бы не сохранить систему PHP и не использовать стороннюю службу SMTP? Некоторые надежные компании предлагают использование машин только для электронной почты по разумным ценам, например, Dewahost , которые я планирую использовать.
См. также вопрос Отправители электронной почты третьих лиц и мой ответ.
Работа, ломающая логика настраивается.
В предпочтения-> текстовые редактор-> поведение , измените режим работы. Вы, вероятно, хотите SharpDevely режим.
Как сказал ThinkJet, потому что MD представляет собой проект OSS, который, конечно, можно написать новый режим перерыва слова, если ни один из существующих не соответствует вашим потребностям.
-121--3383615-Проверьте Campaign Enterprise для возможного внутреннего решения.