Mailman 메일 링리스트에서 사용자를 추가하거나 제거해야하는 .Net 응용 프로그램을 개발해야합니다. 제 질문은 .Net 커넥터 또는 Dll 연결 여부입니다 .Net을 사용하여 우편 발송자 메일 링리스트로..Net을 사용하여 Mailman 메일 링리스트에 연결하는 방법
답변
편집 (9/21/14) : 저는 HTTP 호출을 통해 Mailman v2 목록의 대부분을 조작하기위한 NuGet 패키지를 방금 출시했습니다. https://www.nuget.org/packages/MailmanSharp/
Mailman 인터페이스는 모두 웹에 있기 때문에 HttpWebRequest를 사용하여 "제어"할 수 있습니다. 나는 최근에 구독자 목록을 검색하고, 구독을 취소하거나 사람들을 구독 취소 할 수있는 작은 응용 프로그램을 작성하고, 보통/노멀/기타와 같은 개별 플래그를 설정합니다. POST에서 어떤 변수를 설정해야하는지, 몇 가지 시행 착오를 확인하려면 Mailman 페이지의 소스에서 약간의 정보가 필요합니다. 임시 Mailman 목록을 설정하는 것이 좋습니다.
대부분의 작업을 수행하려면 다른 HttpWebRequests에 연결할 수있는 영구적 인 CookieContainer가 필요합니다. 첫 번째 호출은 다른 페이지에 대한 액세스를 제공하는 세션 쿠키를 설정하는 관리자 비밀번호가있는 관리 페이지의 POST입니다.
일부 POST는 일반 application/x-www-form-urlencoded 유형이지만 일부는 multipart/form-data입니다. 후자의 경우, 내가 http://www.briangrinstead.com/blog/multipart-form-post-in-c에 매우 도움이 코드를 발견 나는 내 CookieContainer 여기
전달할 수 있도록 변경의 몇했습니다 몇 가지 예제 코드는 다음과 같습니다
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;
using System.Data;
using System.Threading;
namespace UpdateListserv
{
class Program
{
static void Main(string[] args)
{
try
{
File.Delete(_logFilename);
Log(String.Format("Starting: {0}", DateTime.Now));
Login();
var roster = GetSubscribers();
Unsubscribe(roster);
string members = GetMemberEmails();
Subscribe(members);
Unmoderate("[email protected]");
Log("Done");
}
catch(Exception e)
{
Log(e.Message);
}
}
private static void Unmoderate(string email)
{
Log("Unmoderating " + email);
email = email.Replace("@", "%40");
_vars.Clear();
_vars["user"] = email;
_vars[email + "_nomail"] = "off";
_vars[email + "_nodupes"] = "on";
_vars[email + "_plain"] = "on";
_vars[email + "_language"] = "en";
_vars["setmemberopts_btn"] = "Submit Your Changes";
FormUpload.MultipartFormDataPost(_adminUrl + _membersPage, "foobar", _vars, _cookies);
}
private static CookieContainer _cookies = new CookieContainer();
private static string _adminUrl = "http://mylist.com/admin.cgi/listname";
private static string _rosterUrl = "http://mylist.com/roster.cgi/listname";
private static string _pw = "myPassword";
private static string _adminEmail = "[email protected]";
private static Dictionary<string, object> _vars = new Dictionary<string, object>();
private static string _addPage = "/members/add";
private static string _removePage = "/members/remove";
private static string _membersPage = "/members";
private static string _logFilename = "Update Listserv.log";
private static void Log(string message)
{
Console.WriteLine(message);
using (var log = File.AppendText(_logFilename))
log.WriteLine(message);
}
private static void Subscribe(string members)
{
// members is a list of email addresses separated by \n
Log("Subscribing everyone");
_vars.Clear();
_vars["subscribees"] = members;
_vars["subscribe_or_invite"] = 0;
_vars["send_welcome_msg_to_this_batch"] = 0;
_vars["send_notifications_to_list_owner"] = 0;
FormUpload.MultipartFormDataPost(_adminUrl + _addPage, "foobar", _vars, _cookies);
}
private static string GetMemberEmails()
{
// This method retrieves a list of emails to be
// subscribed from an external source
// and returns them as a string with \n in between.
}
private static void Unsubscribe(string roster)
{
// roster is a list of email addresses separated by \n
Log("Unsubscribing everybody");
_vars.Clear();
_vars["unsubscribees"] = roster;
_vars["send_unsub_ack_to_this_batch"] = 0;
_vars["send_unsub_notifications_to_list_owner"] = 0;
FormUpload.MultipartFormDataPost(_adminUrl + _removePage, "foobar", _vars, _cookies);
}
private static string GetSubscribers()
{
// returns a list of email addresses subscribed to the list,
// separated by \n
Log("Getting subscriber list");
var req = GetWebRequest(_rosterUrl);
req.Method = "post";
_vars.Clear();
_vars["roster-email"] = _adminEmail;
_vars["roster-pw"] = _pw;
var rosterLines = GetResponseString(req).Split('\n').Where(l => l.StartsWith("<li>"));
Log(String.Format("Got {0} subscribers", rosterLines.Count()));
var roster = new List<string>();
var regex = new Regex("<a.*>(.*)</a>");
foreach (var line in rosterLines)
{
roster.Add(regex.Match(line).Groups[1].Value.Replace(" at ", "@"));
}
return String.Join("\n", roster);
}
private static void Login()
{
Log("Logging in to list admin panel");
var req = GetWebRequest(_adminUrl);
req.Method = "post";
_vars["adminpw"] = _pw;
SetPostVars(req);
req.GetResponse();
}
private static HttpWebRequest GetWebRequest(string url)
{
var result = HttpWebRequest.Create(url) as HttpWebRequest;
result.AllowAutoRedirect = true;
result.CookieContainer = _cookies;
result.ContentType = "application/x-www-form-urlencoded";
return result;
}
private static string GetResponseString(HttpWebRequest req)
{
using (var res = req.GetResponse())
using (var stream = res.GetResponseStream())
using (var sr = new StreamReader(stream))
{
return sr.ReadToEnd();
}
}
private static void SetPostVars(HttpWebRequest req)
{
var list = _vars.Select(v => String.Format("{0}={1}", v.Key, v.Value));
using (var stream = req.GetRequestStream())
using (var writer = new StreamWriter(stream))
{
writer.Write(String.Join("&", list));
}
}
}
}
- 1. java로 메일 링리스트에 메일을 보내는 방법은 무엇입니까?
- 2. PHP 스크립트를 사용하여 cPanel의 메일 링리스트에 사용자를 추가 하시겠습니까?
- 3. .NET을 사용하여 전자 메일 본문에 여러 이미지를 포함하는 방법
- 4. BCC는 PHP 메일()을 TO와 다른 방식으로 메일 링리스트에 보냅니 까?
- 5. url을 사용하여 postgresql에 연결하는 방법
- 6. ror를 사용하여 서버에 연결하는 방법
- 7. .NET을 사용하여 Lotus Notes 폴더의 상위 ID를 얻는 방법?
- 8. C# .Net을 사용하여 텍스트 파일을 읽는 방법
- 9. .net을 사용하여 사용자의 IP 주소를 얻는 방법?
- 10. .net을 사용하여 facebook 응용 프로그램을 만드는 방법
- 11. .net을 사용하여 eml 파일을 읽는 방법?
- 12. C# .net을 사용하여 원격 PC를 종료하는 방법?
- 13. VB .NET을 사용하여 SMS SENDER를 디자인하는 방법
- 14. .NET을 사용하여 CryptUIWizExport 함수를 P/호출하는 방법
- 15. .net을 사용하여 Windows2k8의 시간대 설정을 변경하는 방법
- 16. .NET을 사용하여 텔레콤 인프라와 통신하는 방법
- 17. .NET을 사용하여 StarDict (.dict) 파일을 쿼리하는 방법
- 18. protobuf-net을 사용하여 .proto 파일을 처리하는 방법
- 19. C# .net을 사용하여 배열의 단추를 제거하는 방법?
- 20. .Net을 사용하여 단일 점을 그리는 방법?
- 21. C# .NET을 사용하여 Gmail의 메일을 '읽은 상태로 표시'하는 방법?
- 22. .NET을 사용하여 그래프 플롯
- 23. .NET을 사용하여 FTP 업로드
- 24. .NET을 사용하여 사각형 삭제?
- 25. .net을 사용하여 코드 생성
- 26. .Net을 사용하여 XML 변경
- 27. Mailman gem in Rails 관련 이메일 수신 처리
- 28. .net을 사용하여 직렬 포트 제어 라인 상태를 읽는 방법
- 29. 전자 메일 주소를 기반으로 웹 메일 공급자에 연결하는 방법은 무엇입니까?
- 30. C# .NET을 재정의하는 방법
당신은 당신이 무슨 뜻인지 명확히 주 시겠어요 "연결"하십시오. 원하는 인터페이스를 설명하고 필요한 인터페이스가 무엇인지 명확하게하십시오. – AxelEckenberger
답장을 보내 주셔서 감사합니다. 실제로 메일 맨 메일 링리스트에서 사용자를 가입 또는 탈퇴해야합니까? 어떻게 할 수 있습니까? – chaithu