(Rails 3)
Поскольку я вызываю почтовую программу следующим образом:
CustomerMailer.customer_auto_inform(@form).deliver
В классе CustomerMailer у меня есть частный метод:
def init_email_account(shop_mail)
ActionMailer::Base.raise_delivery_errors = true
ActionMailer::Base.smtp_settings = {
:address => shop_mail.address,
:port => shop_mail.port,
:domain => shop_mail.domain,
:user_name => shop_mail.user_name,
:password => shop_mail.password,
:authentication => shop_mail.authentication.name,
:enable_starttls_auto => shop_mail.enable_starttls_auto
}
end
Before вызывающая почта (), которая отправляет электронную почту, вы должны вызвать частный метод init_email_account для заполнения smtp_settings из базы данных. shop_mail - это модель, в которой хранятся данные о настройках учетной записи электронной почты.
HTH
Попробуйте что-то вроде этого вместо этого;
string illegal = "\"M\"\\a/ry/ h**ad:>> a\\/:*?\"| li*tt|le|| la\"mb.?";
string invalid = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars());
foreach (char c in invalid)
{
illegal = illegal.Replace(c.ToString(), "");
}
, Но я должен согласиться с комментариями, я, вероятно, попытался бы иметь дело с источником недопустимых путей, вместо того, чтобы попытаться исказить недопустимый путь к законному, но вероятно непреднамеренному.
Редактирование: Или потенциально 'лучшее' решение, с помощью Regex.
string illegal = "\"M\"\\a/ry/ h**ad:>> a\\/:*?\"| li*tt|le|| la\"mb.?";
string regexSearch = new string(Path.GetInvalidFileNameChars()) + new string(Path.GetInvalidPathChars());
Regex r = new Regex(string.Format("[{0}]", Regex.Escape(regexSearch)));
illegal = r.Replace(illegal, "");
однако, вопрос напрашивается сам собой, почему Вы делаете это во-первых.
Я думаю, что намного легче проверить использование regex и определение, которое символы позволяются, вместо того, чтобы пытаться проверить на все неверные символы. См. эти ссылки: http://www.c-sharpcorner.com/UploadFile/prasad_1/RegExpPSD12062005021717AM/RegExpPSD.aspx http://www.windowsdevcenter.com/pub/a/oreilly/windows/news/csharp_0101.html
кроме того, сделайте поиск "редактора регулярного выражения" s, они помогают много. Существуют некоторые, вокруг которых даже производит код в c# для Вас.
Я использую регулярные выражения для достижения этого. Во-первых, я динамично создаю regex.
string regex = string.Format(
"[{0}]",
Regex.Escape(new string(Path.GetInvalidFileNameChars())));
Regex removeInvalidChars = new Regex(regex, RegexOptions.Singleline | RegexOptions.Compiled | RegexOptions.CultureInvariant);
Тогда я просто называю removeInvalidChars. Замена, чтобы сделать находку и замену. Это может, очевидно, быть расширено для покрытия символов пути также.
Для начала, Trim только удаляет символы с начала или конца строки . Во-вторых, необходимо оценить, если Вы действительно хотите удалить наступательные символы, или перестать работать быстро и позволить пользователю знать, что их имя файла недопустимо. Моим выбором является последний, но мой ответ должен, по крайней мере, показать Вам, как сделать вещи право И неправильный путь:
вопрос о StackOverflow, показывающий, как проверить, является ли данная строка именем правильного файла . Обратите внимание, что можно использовать regex от этого вопроса удалить символы с заменой регулярного выражения (если действительно необходимо сделать это).
Выдайте исключение.
if ( fileName.IndexOfAny(Path.GetInvalidFileNameChars()) > -1 )
{
throw new ArgumentException();
}